Python异常处理(一)如何捕获异常

一、如何捕获异常

1.使用try…except捕获所有异常

如下示例代码:

def test_div(num1, num2):
    """当除数为0"""
    return num1 / num2


if __name__ == '__main__':
    temp = test_div(5, 0)
    print(temp)

如果temp = test_div(5, 0)传入50时,会报除数不能为0的异常ZeroDivisionError: division by zero
除数不为0
如果temp = test_div(5, 'a')传入5a(任意字符)时,会报类型错误异常TypeError: unsupported operand type(s) for /: 'int' and 'str'
类型错误
异常处理时可以使用try...except进行统一处理

try:
    temp = test_div(5, 0)
    print(temp)
except:
    print("除数不能为0")

try语句内发生异常时会执行except里的内容,但是如上的处理会存在一定问题,如果test_div(5, 'a')传入任意字符时发生异常或者发生其它异常时依旧会执行print("除数不能为0"),所以针对传入不同参数进行不同的异常处理才符合逻辑。

2.使用try…except捕获指定异常

需要在except的后面把发生的异常指定出来,报什么错就指定什么错误。

try:
    temp = test_div(5, 'a')
    print(temp)
except ZeroDivisionError:
    print("除数不能为0")
except TypeError:
    print("类型输入错误")

除数为0就执行ZeroDivisionError后的内容,除数为字符就执行TypeError后的内容

3.使用try…except捕获多个指定异常

如果嫌上面的异常处理对每一个进行处理过于麻烦,也可以进行统一的处理,把发生的异常用()括起来

try:
    temp = test_div(5, 'a')
    print(temp)
except (ZeroDivisionError, TypeError):
    print("反正报错了!")

在捕获多个异常的时候如果不知道发生了什么异常,为了方便排查程序中出现的问题,可以使用as把异常对象打印出来,将上面的代码修改成如下所示

try:
    temp = test_div(5, 'a')
    print(temp)
except (ZeroDivisionError, TypeError) as error:
    print("反正报错了!")
    print(error)

执行结果:
指定多个异常
try里报错了,也在except里面进行处理了,程序已经执行完毕,如果这时程序中还有一部分必不可少的逻辑需要执行,可以在报错之后使用finally在程序的后面在进行一次操作

4.使用try…except…finally处理必不可少的逻辑

try:
    temp = test_div(5, 1)
    print(temp)
except (ZeroDivisionError, TypeError) as error:
    print("反正报错了!")
    print(error)
finally:
    print("无论如何最后我也得执行")

传入51时的执行结果:
传入5和1执行结果
传入50时的执行结果
传入5和0时的执行结果

二、自定义异常

当系统预置的异常不够我们使用的时候,需要自定义异常

发布了20 篇原创文章 · 获赞 18 · 访问量 8349

猜你喜欢

转载自blog.csdn.net/wankcn/article/details/97575268