深入理解python try异常处理机制

  • Post category:Python

深入理解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'