Python中的异常处理3-2

在《Python中的异常处理3-1》中提到,用except可以捕获所有的异常。实际上,在程序运行的过程中,出现异常的原因有很多,比如下标超出范围、除数为0、变量未定义等。

1 except语句加上具体的异常类型

可以在except语句之后加上具体的异常类型,表示该语句只捕获指定的异常,代码如下所示。

a, b = input('请输入被除数和除数:').split()
try:
    print(int(a)/int(b))
except ZeroDivisionError:
    print('除数不能为0。')

其中,except语句只捕获ZeroDivisionError异常,当除数是0时,就会Python会抛出该异常。程序处理ZeroDivisionError异常的输入及输出如图1所示。

Python中的异常处理3-2_第1张图片

图1 处理ZeroDivisionError异常

从图1中可以看出,运行程序后输入的值是“1 0, 即此时a的值是“1”,b的值是“0”。

int(b)的值是0,Python会抛出ZeroDivisionError异常,该异常被我们编写的代码处理,显示“除数不能为0”。

当输入的是“1 a”时,b的值是“a”,此时int(b)无法将其转换为整型,会抛出ValueError异常。但是由于我们的代码没有捕获ValueError异常,因此该异常会交由Python处理,此时会显示红色报错信息,代码如图2所示。

Python中的异常处理3-2_第2张图片

图2 ValueError异常的处理

2 同时处理多个异常

对于在“1 except语句加上具体的异常类型”中提到的一段代码可能会出现多个异常的情况,我们可以使用多个except来捕获,代码如下所示。

a, b = input('请输入被除数和除数:').split()
try:
    print(int(a)/int(b))
except ZeroDivisionError:
    print('除数不能为0。')
except ValueError:
    print('输入的不是数字。')

当输入“1 a”时,由于代码捕获了ValueError异常,因此会显示“输入的不是数字”,如图3所示。

Python中的异常处理3-2_第3张图片

图3 捕获多个异常

你可能感兴趣的:(Python基础学习,Python,异常处理,多个except,ValueError,ZeroDivision)