【发布时间】:2011-04-29 04:33:57
【问题描述】:
我最近在 Python 生成器中遇到了一些令人惊讶的行为:
class YieldOne:
def __iter__(self):
try:
yield 1
except:
print '*Excepted Successfully*'
# raise
for i in YieldOne():
raise Exception('test exception')
它给出了输出:
*Excepted Successfully*
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
Exception: test exception
*Excepted Successfully* 被打印出来让我(很高兴)感到惊讶,因为这是我想要的,但也很惊讶 Exception 仍然传播到顶层。我期望必须使用(在此示例中注释)raise 关键字来获得观察到的行为。
谁能解释为什么这个功能可以正常工作,以及为什么生成器中的except 没有吞下异常?
这是 Python 中唯一一个 except 不会吞下异常的实例吗?
【问题讨论】:
标签: python exception generator