【转】python错误During handling of the above exception, another exception occurred是如何发生的?
·
原文链接https://www.pynote.net/archives/1856
简单来说(try抛出连续发生错误的地方)
例如:request向数千个url发起请求时,大量url访问失败就会报During handling of the above exception, another exception occurred错误。使用try抛出异常可解决。
try:
re = request.get(url)
except:
print("time out")
原文内容
调试python代码,常常看到这样的提示,During handling of the above exception, another exception occurred。这是如何发生的?
请看如下代码:
x = 2
y = 0
try:
result = x / y
except ZeroDivisionError:
raise ValueError('raise in exception clause')
print("=== division by zero!")
else:
print("result is", result)
finally:
raise ValueError('raise in finally clause')
print("executing finally clause")
ZeroDivisionError必然发生,然后代码进入except分支,在这个分支中,遇到了一个raise,后面的print得不到执行。由于有finally分支,在raise之前,需要执行finally分支的代码,不幸的是,此时又遇到了raise,它后面的print也得不到执行。因此运行这段代码的效果,就是如下:
E:\py>python try.py
Traceback (most recent call last):
File "try.py", line 8, in
result = x / y
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "try.py", line 10, in
raise ValueError('raise in exception clause')
ValueError: raise in exception clause
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "try.py", line 15, in
raise ValueError('raise in finally clause')
ValueError: raise in finally clause
这就是During handling of the above exception, another exception occurred的由来!在处理异常的except分支或离开try的finally分支有raise,就会出现这样的提示。
到此,自然而然我们会想到另一个问题,在这种情况下,如果这段代码整体有try护着,抛出来的异常时哪个呢?请看下面的测试代码:
def testA():
x = 2
y = 0
try:
result = x / y
except ZeroDivisionError:
raise ValueError('raise in exception clause')
print("=== division by zero!")
else:
print("result is", result)
finally:
raise ValueError('raise in finally clause')
print("executing finally clause")
try:
testA()
except Exception as e:
print(repr(e))
运行结果:
E:\py>python try.py
ValueError('raise in finally clause')
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)