在延迟回调中引发异常
Raising exceptions in Deferred callbacks
我有以下代码:
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 处理,并且在添加 callback3 后没有添加错误处理程序,我预计 'Unhandled exception...' 会被抛出,但是没有发生。我在这里遗漏了什么吗?
请帮忙
谢谢
运行 你的例子,我看到了你期望的输出:
callback1 called with Test
callback2 called with Test
Unhandled error in Deferred:
Traceback (most recent call last):
File "t.py", line 21, in <module>
d.callback("Test")
File ".../twisted/internet/defer.py", line 393, in callback
self._startRunCallbacks(result)
File ".../twisted/internet/defer.py", line 501, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File ".../twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "t.py", line 11, in callback3
raise Exception("callback 3")
exceptions.Exception: callback 3
使用多个版本的 Twisted。你真的 运行 那个脚本原样吗?我假设您重新输入了输出,并且没有复制和粘贴它,因为您在 with
和 Test
之间只有一个 space 而不是实际打印的两个。
我有以下代码:
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 处理,并且在添加 callback3 后没有添加错误处理程序,我预计 'Unhandled exception...' 会被抛出,但是没有发生。我在这里遗漏了什么吗?
请帮忙 谢谢
运行 你的例子,我看到了你期望的输出:
callback1 called with Test
callback2 called with Test
Unhandled error in Deferred:
Traceback (most recent call last):
File "t.py", line 21, in <module>
d.callback("Test")
File ".../twisted/internet/defer.py", line 393, in callback
self._startRunCallbacks(result)
File ".../twisted/internet/defer.py", line 501, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File ".../twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "t.py", line 11, in callback3
raise Exception("callback 3")
exceptions.Exception: callback 3
使用多个版本的 Twisted。你真的 运行 那个脚本原样吗?我假设您重新输入了输出,并且没有复制和粘贴它,因为您在 with
和 Test
之间只有一个 space 而不是实际打印的两个。