作者ResolaQQ (ResolaQQ)
看板Python
标题[问题] __exit__ 怎麽 raise Exception?
时间Tue Jan 19 19:09:15 2016
class A:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
raise Exception('A')
在 __exit__ 一定会丢出 Exception 的情况下,底下这段的结果在预期之中
>>>> with A():
.... pass
....
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 5, in __exit__
Exception: A
但底下这段就有问题了,先丢出的 Exception 被後丢出的覆盖
>>>> with A():
.... raise Exception('B')
....
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 5, in __exit__
Exception: A
请问该怎麽写才能比较好处理这种情况?
我遇上 A, B, C 的 __exit__ 都有可能丢出 Exception
程式本体也有可能丢出 Exception,像这样
>>> with A(), B(), C():
... raise Exception('D')
...
结果一团乱,根本不知道要怎麽处理...
--
放着养蚊子的部落格
http://resolaqq.blogspot.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.230.21.111
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1453201758.A.9A9.html
1F:→ uranusjr: 如果里面有 exception, exit 得到的三个参数会有值可以 01/19 20:31
2F:→ uranusjr: 让你 reraise, 优先处理它们就是了 01/19 20:32
3F:→ ResolaQQ: 抱歉问了个蠢问题,从来没用过那三个参数,就自动遗忘了 01/19 21:12