详解 Python 中的异常处理

目录

11.1 try-except

11.2 多个 except

11.3 自定义异常

11.4 捕获多个异常

 11.5 异常之禅


异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理⽅法。当出现错误后,程序的执⾏流程发⽣改变,程序的控制权转移到异常处理。

异常处理可以使开发⼈员能以优雅的⽅式处理错误。

11.1 try-except

Python 使⽤ try-except 语句处理异常。语法如下:

 在 try 语句块中,我们写⼊可能会产⽣异常的代码,当异常发⽣时, try 语句块中的代码会被忽略,转⽽进⼊ except 语句块中处理异常。例如:

上述代码的执⾏流程如下:
1. 先执⾏介于 try 和 except 之间的语句。
2. 如果没有异常,则 except 语句块中的代码会被跳过。
3. 如果⽂件不存在,则产⽣异常,在 try 语句块中的其他代码会被跳过。
4. 当异常发⽣时,如果异常类型和 except 关键字后的异常名称匹配,就执⾏except 分⽀中的代码。上述代码中只能处理 IOError 异常,如要处理其他类型的异常,还需要添加更多的 except 分⽀。

11.2 多个 except

try 声明可以有多个 except 分⽀,它还可以选择 else 和 finally 分⽀。语法如下:

except 分⽀类似于 elif。当异常发⽣时,将检查 except 分⽀是否和异常类型匹配。如果匹配,就执⾏对应 except 分⽀中的代码。在最后⼀个 except 分⽀中,异常类型是被忽略了的。如果异常发⽣,但没有匹配到最后⼀个 except 之前的分⽀,则最后的
except 分⽀中的代码会被执⾏。如果没有任何异常发⽣,则执⾏ else 语句中的代码。finally 分⽀中的代码,⽆论是否有异常发⽣,都会被执⾏。

11.3 自定义异常

使⽤关键字 raise,可以在⽅法中⾃定义异常。语法为:
 

raise ExceptionClass("Your argument")

例如:

当⽤户输⼊的年龄⼩于 0 时,程序显⽰结果为:

有很多内置的异常类,表8-1描述了最重要的几个。在“Python库参考手册”的Built-inExceptions一节,可找到有关所有内置异常类的描述。这些异常类都可用于raise语句中。

 

11.4 捕获多个异常

如果要使用一个except子句捕获多种异常,可在一个元组中指定这些异常,如下所示:
 

try:
    x = int(input('Enter the first number: '))
    y = int(input('Enter the second number: '))
    print(x / y)
except (ZeroDivisionError, TypeError, NameError):
    print('Your numbers were bogus ...')

 11.5 异常之禅

异常处理并不是很复杂。如果你知道代码可能引发某种异常,且不希望出现这种异常时程序终止并显示栈跟踪消息,可添加必要的try/except或try/finally语句(或结合使用)来处理它。

有时候,可使用条件语句来达成异常处理实现的目标,但这样编写出来的代码可能不那么自然,可读性也没那么高。另一方面,有些任务使用if/else完成时看似很自然,但实际上使用try/except来完成要好得多。




 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值