是否存在调用.callback()
或.errback()
将向调用者引发异常而不会被延迟捕获的情况?
假设我有以下延迟和回调:
from twisted.internet import defer
def bad_callback(result):
raise Exception()
def bad_errback(result):
raise Exception()
d = defer.Deferred()
d.addCallbacks(bad_callback, bad_errback)
如果我打电话d.callback(None)
,结果d
将是Exception
from bad_callback()
。如果我跟注d.errback(Exception())
,结果d
将是Exception
从bad_errback()
. 但是,在任何一种情况下,都不会向调用者提出异常。
现在,我确实知道调用.callback()
或.errback()
将向调用者引发异常的几种情况,但这些情况是您违反正确使用延迟的情况。
显然,如果您调用
.callback()
或.errback()
使用不正确数量的参数,它将引发TypeError
.调用已经调用的 deferred 将引发
AlreadyCalledError
。跟注
.callback(defer.Deferred())
会引发AssertionError
.调用
.errback()
等效于调用.errback(failure.Failure())
which 将NoCurrentExceptionError
在没有活动异常的情况下引发。
真的,我的问题归结为:只要尚未调用 deferred 并且结果正确,我是否可以安全地依赖调用.callback(result)
或结果永远不会引发异常的行为?.errback(exception_or_failure)