Python异常处理(try…except)

< 上一页Python异常初探 Python注释下一页 >
在 Python 中,如果出现异常,我们可以自己编写代码来捕获这些异常,并且让 Python 解释器不用终止程序。

处理异常的语句是 try…except 语句,我们把可能出现异常的语句放到 try 子句中,把出现异常后的处理语句放到 except 子句中。还是以数字和字符串相加来作为例子,代码如下。
try:
    numberEight=8
    stringEight="8"
    print (numberEight+stringEight)
    print ("没有出现异常,一切顺利")
except:
    print ("出现了异常情况")
因为这里把会出现异常的语句放到了 try 子句中,所以当 Python 捕获到异常后,就不再执行剩下的语句了,而是直接跳到 except 子句去执行。

运行代码,得到的结果如图 1 所示。

python 异常处理
图 1

如果 try 子句在执行时没有出现异常,那么就不会执行 except 子句中的代码。将前面的例子稍作修改,这次让 numberEight 和 numberEight 相加。
try:
    numberEight=8
    stringEight="8"
    print (numberEight + numberEight)
    print ("没有出现异常,一切顺利")
except:
    print ("出现了异常情况")
运行代码,得到的结果如图 2 所示。

python 异常处理
图 2

可以看到这次代码顺利地把相加后的结果打印出来,并且继续执行 try 子句后面的代码。而 except 子句中的代码则没有执行。

我们不仅可以判断是否会有异常,还可以根据不同的异常来进行相应的处理。只要把异常的类型写在 except 后面就可以了。下面还是让一个数字除以 0,然后捕获 ZeroDivisionError 这个异常,并且做出相应的提示,代码如下。
try:
    numberEight=8
    print (numberEight/0)
    print ("没有出现异常,一切顺利")
except ZeroDivisionError:
    print ("这是一个除零错误")
运行代码,得到的结果如图 3 所示

python 异常处理
图 3

可以看到,程序成功地捕获了这个 ZeroDivisionError 异常,并且做出了相应的处理。

在 Python 中,一个 try 子句也可以对应多个 except 子句,每个 except 子句分别用来处理不同的异常。

来看一个示例:
  • 首先我们使用 while 循环,条件为 True,表示这个循环会一直进行下去,直到满足某个条件后,才能跳出循环;
  • 然后要求用户输入一个不为零的数字,如果用户按照要求输入,那么会在屏幕上打印出"没有出现任何异常",并且结束 while 循环;如果用户输入的不是数字,那么会在屏幕上打印出"输入数字而不是字符,请重试";如果用户输入的是 0,那么会在屏幕上打印出"输入错误,0 不可以作为除数,请重试",

代码如下:
while True:
    try:
        firstNumber=int(input("请输入一个不为零的数字:"))
        secondNumber=10/firstNumber
        print("没有出现任何异常")
        break
    except ZeroDivisionError:
        print ("输入错误,0不可以作为除数,请重试")
    except ValueError:
        print ("输入错误,输入数字而不是字符,请重试")
运行这段代码,当输入字符“a”,会提示输入错误,不能输入字符;当输入数字 0,也会提示输入错误,不能输入 0,因为 0 不能作为除数;只有当用户输入一个非零的数字之后,程序才会正常结束,如图 4 所示。

python 异常处理
图 4
< 上一页Python异常初探 Python注释下一页 >