Python异常信息中'above exception'指向什么?为何用'During'而非'After'?
Python异常处理中的两个常见疑问解答
一、两类Python异常场景示例
场景1:直接触发ZeroDivisionError
执行以下代码:
1 / 0
得到的报错信息:
Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero
场景2:处理异常时触发新异常
定义并调用如下函数:
def f1(): try: 1 / 0 except ZeroDivisionError: raise myException("出错了") f1()
得到的报错信息:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in f1 ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in f1 NameError: name 'myException' is not defined
二、疑问解答
1. 为什么提示语是'During handling of the above exception'而非'After handling...'?
因为try块触发ZeroDivisionError后,Python刚进入except块开始处理这个异常,还没等把异常处理完(except里的代码还在执行),就又抛出了NameError——整个原异常的处理流程还在进行中,并没有结束。用During就是精准描述这个“处理异常的过程中”出问题的状态,要是用After,就意味着原异常已经处理完毕,和实际情况完全不符。
2. 'above exception'具体指向什么?
它明确指向1/0触发的ZeroDivisionError,也就是第一个报错Traceback里的那个异常。提示语的意思是“在处理上述那个ZeroDivisionError的过程中,又出现了另一个异常”,和整个try...except结构没有关系。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

