【发布时间】:2014-03-11 15:05:35
【问题描述】:
是否存在调用.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 中的结果将是来自bad_callback() 的Exception。如果我调用d.errback(Exception()),d 中的结果将是从bad_errback() 引发的Exception。但是,在任何一种情况下,都不会向调用者提出异常。
现在,我确实知道调用 .callback() 或 .errback() 会向调用者引发异常的几种情况,但这些情况会违反正确使用延迟。
显然,如果您使用不正确数量的参数调用
.callback()或.errback(),它将引发TypeError。调用已调用的 deferred 将引发
AlreadyCalledError。调用
.callback(defer.Deferred())将引发AssertionError。调用
.errback()等效于调用.errback(failure.Failure()),如果没有活动异常,则会引发NoCurrentExceptionError。
真的,我的问题归结为:只要尚未调用 deferred 并且结果正确,我是否可以安全地依赖调用 .callback(result) 或 .errback(exception_or_failure) 的结果永远不会引发异常的行为?
【问题讨论】:
标签: python twisted twisted.internet