我最近遇到了一些令人吃驚的行爲排在Python生成: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*
得到了印刷,因爲這是我想要的,但也感到驚訝的是,異常仍然傳播到最高層。我期待必須使用(在本例中評論)raise
關鍵字來獲得觀察到的行爲。
任何人都可以解釋爲什麼這個功能的工作原理和爲什麼生成器中的except
不會吞下異常?
這是Python中唯一一個except
不會吞下異常的實例嗎?
啊哈,現在有道理。我最初並沒有預料到這個例外會傳播給發電機。 – EoghanM 2010-10-22 14:22:50
+1非常有趣! – rubik 2010-10-22 14:41:01
用於照亮'generator.throw'技巧! – EoghanM 2013-02-27 12:03:53