【发布时间】:2020-05-26 17:32:36
【问题描述】:
我在 Python 3.6 中遇到了一个有趣的现象。如果我在类的__exit__ 方法中返回self,似乎在使用所述类的with 块中引发的任何异常都会消失。我不知道它为什么会发生,而且这似乎不是理想的行为。使用以下代码,我可以重现它:
class SomeObject(object):
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
return self
if __name__ == '__main__':
with SomeObject():
print('This print statement works')
raise Exception('This exception is not raised for some reason')
print('This statement is printed as if nothing happened')
这导致我提出以下问题:
- 你能重现这个还是只有我一个人?
- 异常是否应该消失(即是否有充分的理由)?如果是,为什么?
【问题讨论】:
标签: python python-3.x exception