深入理解Python try异常处理机制
异常(Exception)是在程序执行过程中出现的错误,例如除数为零、文件不存在等。Python提供了try…except语句块用于捕获并处理异常,保证代码能够在出现异常时正确地继续执行。
try…except语法
try…except语句块具有如下语法:
try:
# 可能引发异常的代码
except ExceptionType1:
# 处理ExceptionType1异常的代码
except ExceptionType2:
# 处理ExceptionType2异常的代码
...
except ExceptionTypeN:
# 处理ExceptionTypeN异常的代码
else:
# 如果try块中没有引发异常,执行else块的代码
finally:
# 无论try块中是否发生异常,都会执行finally块的代码
try块中包含了可能引发异常的代码。如果try块中某条语句引发了异常,那么程序就跳转到与该异常类型匹配的except块中执行相应的处理代码。如果没有与该异常类型匹配的except块,则该异常将继续向上层抛出,直到被处理或者导致程序中止。
如果try块中的所有语句执行完毕,都没有引发异常,则执行else块中的代码。else块可选。
无论try块中是否发生异常,finally块都会被执行。finally块可选。
异常类型
Python提供了许多内置异常类型来处理不同类型的错误,如下表所示:
异常类型 | 描述 |
---|---|
OSError | 操作系统产生的异常 |
TypeError | 类型不匹配异常 |
NameError | 名称未定义异常 |
AttributeError | 对象没有此属性异常 |
ValueError | 值错误异常 |
ZeroDivisionError | 除数为零异常 |
IndexError | 索引错误异常 |
KeyError | 键错误异常 |
StopIteration | 停止迭代异常 |
ImportError | 导入模块失败异常 |
IOError | 文件操作失败异常 |
MemoryError | 内存溢出异常 |
ZeroDivisionError | 在除操作时发现除数为 0 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
RuntimeError | 一般运行时异常 |
AssertionError | 断言异常 |
SystemExit | Python 解释器请求退出 |
捕获异常
示例代码如下:
try:
a = 10 / 0
except ZeroDivisionError as e:
print('出现除数为零异常:', e)
上述代码尝试计算10除以0,由于除数为零,便会引发ZeroDivisionError异常。当程序执行到try语句块中的第一行代码时,会尝试执行a = 10 / 0,如果引发了ZeroDivisionError异常,便跳转到except块,执行打印语句。输出结果如下:
出现除数为零异常: division by zero
异常传递
示例代码如下:
try:
with open('file.txt', 'r') as f:
lines = f.readlines()
except Exception as e:
print(f'出现异常:{e}')
else:
print('文件读取成功。')
上述代码尝试打开文件file.txt,并将其内容读入lines中。如果文件不存在,便会引发异常。当程序执行到try语句块中的第一行代码时,会尝试打开文件file.txt。如果该文件不存在,便会引发异常并跳转到except块,执行打印语句。如果该文件存在并且成功读入了文件的内容,便会执行else块中的代码,打印文件读取成功的消息。输出结果如下:
出现异常:[Errno 2] No such file or directory: 'file.txt'