赞
踩
在 Python 中 , 异常是具有传递性的 , 该特性是 Python 中的一个重要特性 , 它使得代码更加健壮和可靠 ;
异常传递 指的是 在代码中捕获一个异常 , 并在另一个地方处理它的过程 ;
异常处理顺序 : Python 中的异常处理顺序是按照 从内向外的顺序 进行的 , 如果一个异常 没有被内层的 try 块捕获 , 那么它将会被 传递到外层的 try 块 中 , 如果 最终没有 try 块能够处理这个异常 , 那么程序将会终止 , 并显示一个错误信息 ;
异常传递 : 如果 在 try 块中抛出了一个指定类型的异常 , 程序会立即跳回到最内层的 except 块中寻找能够处理这个异常的代码 ;
该过程会一直持续 , 直到找到能够处理该异常的代码 或者 程序终止 ;
异常重抛 : 在 except 块中处理异常时 , 可以 将异常重新抛出 ; 这表示 当前代码不处理该异常 , 需要将其传递给上层的代码进行处理 ; 使用 raise 语句并指定相同的异常类型和错误信息 , 重新抛出异常 ;
异常处理多层嵌套 : 异常处理操作是可以嵌套多层的 , 该机制使得代码 以更加灵活地处理异常 , 并且可以在不同的层次中处理不同类型的异常 ;
在 函数 A 中 执行会产生异常的代码 , 如 1 / 0
, 会抛出一个 ZeroDivisionError 异常 ;
在 函数 B 中调用 函数 A , 在 函数 C 中调用 函数 B ;
函数 A 会将 ZeroDivisionError 异常 抛出给 函数 B , 函数 B 如果没有处理该异常 , 则会将异常抛出给 函数 C ;
此时可以在 函数 C 中 , 捕获 ZeroDivisionError 异常 , 并进行处理 ;
代码示例 :
""" 异常传递 代码示例 """ def funA(): print("funA 执行开始") num = 1 / 0 print("funA 执行结束") def funB(): print("funB 执行开始") funA() print("funB 执行结束") def funC(): print("funC 执行开始") funB() print("funC 执行结束") funC()
执行结果 :
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py Traceback (most recent call last): File "D:\002_Project\011_Python\HelloPython\Hello.py", line 24, in <module> funC() File "D:\002_Project\011_Python\HelloPython\Hello.py", line 20, in funC funB() File "D:\002_Project\011_Python\HelloPython\Hello.py", line 14, in funB funA() File "D:\002_Project\011_Python\HelloPython\Hello.py", line 8, in funA num = 1 / 0 ZeroDivisionError: division by zero funC 执行开始 funB 执行开始 funA 执行开始 Process finished with exit code 1
在上个章节的代码中 , ZeroDivisionError 异常 是按照下面的顺序进行传递的 :
funA() 函数 -> funB() 函数 -> funC() 函数
可以在 上述 3 个函数中的 任意一个位置 , 捕获异常 , 并处理异常 ;
代码示例 :
""" 异常传递 代码示例 """ def funA(): print("funA 执行开始") num = 1 / 0 print("funA 执行结束") def funB(): print("funB 执行开始") funA() print("funB 执行结束") def funC(): print("funC 执行开始") try: funB() except Exception as e: print(f"捕获到了异常 {e}") print("funC 执行结束") funC()
执行结果 :
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
funC 执行开始
funB 执行开始
funA 执行开始
捕获到了异常 division by zero
funC 执行结束
Process finished with exit code 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。