前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学习 Python 之处理异常

零基础学习 Python 之处理异常

作者头像
编程文青李狗蛋
发布2019-11-07 15:44:18
2480
发布2019-11-07 15:44:18
举报
本文字数:2135 字 阅读本文大概需要:6 分钟

写在之前

在昨天的文章(零基础学习 Python 之错误 & 异常)中我介绍了 Python 中「错误 & 异常」的概念,如果在程序运行过程中抛出了异常,程序就会中止运行。这样的程序不是「健壮」的,健壮的程序应该不被各种异常所击倒。

所以,程序出现了异常就要「处理异常」。

处理异常

首先,让我们先来看一段代码:

代码语言:javascript
复制
while True:
    print('this is a division program.')
    a = input("input 'a' continue,otherwise logout:")
    if a == 'a':
        x = input('first number')
        y = input('second number')
        try:
            print(float(x)/float(y))
            print('***************')
        except ZeroDivisionError:
            print('the second number can not be zero.')
            print('***********************************')

    else:
        break

运行上面的代码,显示的结果如下:

代码语言:javascript
复制
this is a division program.
input 'a' continue,otherwise logout:a
first number5
second number2
2.5
***************
this is a division program.
input 'a' continue,otherwise logout:a
first number5
second number0
the second number can not be zero.
***********************************
this is a division program.
input 'a' continue,otherwise logout:b

从运行的情况来看,当在第 2 个数,即除数为 0 时,程序并没有因为这个错误而停止,而是给了一个很友好的提示,让我们有机会改正错误,这完全得益于「异常处理」的设置,如果没有处理异常的机制,当异常出现的时候程序就会中止。

1.try...except...

对于上面的例子,只看到了 try 和 except 部分,如果没有异常发生的话,except 在 try 执行后被忽略;如果 try 子句中有异常的话,则该部分的其它子句被忽略,直接跳到 except 部分,执行其后面指定的异常类型及其子句。

except 后面也可以没有任何异常类型,即无异常参数。如何这样的话,不论 try 部分发生什么异常,都会执行 except。

2.处理多个异常

try...except... 是处理异常的基本方式,在此基础上,还可以扩展,也就是能够处理多个异常。

这里所说的处理多个异常,并不是因为同时报出多个异常,而是程序在运行中,只要遇到一个异常就会反应,所以每次捕捉到的异常一定是一个,由不同的 except 子句处理。

3. else 子句

其实有了 try...except...,在一般情况下是够用的,但怕就怕在总有不一般的情况出现,所以就增加一个 else 子句,这个其实就和我们说的话一样,总要根据需要添加不少东西。

代码语言:javascript
复制
try:
    print('just try')
except:
    print('just except')
else:
    print('i am else')

上述代码的运行结果如下:

代码语言:javascript
复制
just try
i am else

上述代码能够帮助我们理解 else 的执行特点:如果 try 被执行了,则 except 被忽略,但是 else 被执行。然后我们在来看下面的代码:

代码语言:javascript
复制
try:
    print(1/0)
except:
    print('just except')
else:
    print('i am else')

上述代码的运行结果如下:

代码语言:javascript
复制
just except

这个时候,else 就不被执行了,两个例子帮助我们了解了 else 的执行特点。

4.finally

finally 子句,一看这个名字,就感觉这是做善后工作的。的确如此,如果有了 finally ,不管前面执行的是 try 还是 except,最终都要执行它。因此,有一种说法是将 finally 用在可能的异常后进行清理,请看下面的例子:

代码语言:javascript
复制
x = 10

try:
    x = 1 / 0
except Exception as e:
    print(e)
finally:
    print(e)
    del x

上述代码的运行结果如下:

代码语言:javascript
复制
integer division or modulo by zero
del x

我们来看一看 x 是否被删除:

代码语言:javascript
复制
>>> x
Traceback (most recent call last):
  File "test_search.py", line 1, in <module>
    print(x)
NameError: name 'x' is not defined

当然,在应用里面可以将上面的各个句子综合起来使用,写成下面这样:

代码语言:javascript
复制
try:
    do something

except:
    do something

else:
    do something
    
finally:
    do something

写在最后

异常处理到这就写完了,基本上所有的都在这了,明天是「错误 & 异常」的一个扩展知识点 -- 「断言」,敬请期待。

如果你觉得今天的文章对你有所帮助的话,欢迎点赞转发,谢谢支持。

The end。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档