代碼
def gen():
try:
for i in range(5):
yield i
except Exception as e:
print('Caught: ' + str(e))
finally:
print('I am done')
for x in gen():
print(x)
if x == 2:
raise Exception('Catch me?')
輸出
0
1
2
I am done
Traceback (most recent call last):
File "test.py", line 13, in <module>
raise Exception('Catch me?')
Exception: Catch me?
問題條款
爲什麼代碼執行finally
條款而不是except
條款?的Python:嘗試...除了......終於在發電機
請給予解釋與參考。
你在'gen()'函數外面引發異常,所以它沒有捕獲它。並且'finally'總是被執行。 – furas
因爲'finally'每次執行時代碼是否失敗(它就像是一個清理),並且你在異常發生器之外引發了異常,所以它不知道它 – danidee
嘗試''g = gen() ; g.throw(ValueError)'''。 – wwii