2
我有以下代碼:引發異常
from twisted.internet.defer import Deferred
def callback1(result):
print "callback1 called with ",result
return result
def callback2(result):
print "callback2 called with ",result
def callback3(result):
raise Exception("callback 3")
def errback(result):
print 'handled error'
return 'everything fine now'
d = Deferred()
d.addCallback(callback1)
d.addCallback(callback2)
d.addCallbacks(callback3, errback)
d.callback("Test")
我期望的輸出是:
callback1 called with Test
callback2 called with Test
Unhandled Error
....
但我實際上得到的是
callback1 called with Test
callback2 called with Test
由於異常在回調鏈中N級提升由級別爲N + 1的errback處理,添加後沒有添加錯誤處理程序回調3,我期待'未處理的異常...'被拋出,但是這並沒有發生。我在這裏錯過了什麼嗎?
請幫助 謝謝
感謝您的回覆雕文。你是對的,這個例子在作爲python腳本運行時會給出預期的輸出。我從Python REPL運行它。爲什麼它不會在REPL中拋出未處理的錯誤? –
當'Deferred'在垃圾收集時仍處於失敗狀態時,會打印未處理的錯誤。如果用control-D退出解釋器(或在Windows上輸入control-Z),您將看到它打印出來。問題是,雖然你仍然有一個'd'的引用,你可能還會添加一個errback來處理錯誤,所以你可能會恢復。 – Glyph
我現在明白了,非常感謝:) –