异常与异常处理
\quad
异常是运行期检测到的错误,计算机语言针对可能出现的错误定义 了异常类型,若代码有进行异常处理,则某种错误引发对应的异常时,异常处理程序会被启动,从而使得程序可以正常运行。
常见: IndexError,KeyError,SyntaxError,TypeError,ValueError
异常处理语句
1)try-except
try:
检测范围
except 异常类型 [as reason]:
注意: ①执行顺序: 先执行try子句(在try关键字和except关键字之间的语句) 如果没有异常发生,忽略except子句;若发生异常,则try子句余下的部分被忽略,如果异常的类型和某个except后的相符(可以包含多个except子句,来处理不同的特定的异常),那么对应的except子句被执行;如果异常的类型没有与任何的except匹配,那么这个异常会传递给上层。 ②多个except子句 一个try语句中可能包含多个except子句,分别来处理不同的特定的异常,最多只有一个子句被执行,这些子句从上到下被查询,异常类型匹配则被执。所以,多个except子句时需要坚持对其规范排序,要从最具针对性的异常到通用的异常,也就是存在继承关系的异常时要将子类放在父类前面 ③一个except子句包含多个异常 可以用一个except来同时处理多个异常,这些异常被放在一个括号内成为一个元组
2)try-except-finally
try:
检测范围
except 异常类型 [as reason]:
finally:
无论如何都会被执行的代码
注意: ①无论try子句有没有抛出异常,finally子句都会被执行。 ②如果一个异常在try子句抛出,且没有except与其相符,那么这个异常会在finally执行后抛出。
3)try-except-else
try:
检测范围
except 异常类型 [as reason]:
else:
如果try没有抛出异常,则执行这块代码
注意: else子句的存在必须以except子句的存在为前提,在没有except子句的try语句中使用else是语法错误;此外,只有try没有其他子句也出现语法错误;但是try-finally确实允许的,但是这样的异常处理没except感觉没意义。
|