.callback()orを呼び出す.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)、の結果はfromにdなります。を呼び出すと、 の結果はから発生したものになります。ただし、いずれの場合も、例外は呼び出し元に発生しません。Exceptionbad_callback()d.errback(Exception())dExceptionbad_errback()
.callback()現在、 orを呼び出すと呼び出し元に例外が発生するいくつかの条件を知ってい.errback()ますが、それらは deferred の適切な使用に違反する条件です。
明らかに、不適切な数の引数で
.callback()またはを呼び出すと、 ..errback()TypeErrorすでに呼び出されている deferred を呼び出すと、 が発生し
AlreadyCalledErrorます。を呼び出す
.callback(defer.Deferred())と、 が発生しAssertionErrorます。呼び出しは、アクティブな例外がない場合に発生する
.errback()呼び出しと同等です。.errback(failure.Failure())NoCurrentExceptionError
本当に私の質問は次のとおりです。遅延オブジェクトがまだ呼び出されておらず、結果が適切である限り、.callback(result)orを呼び出しても例外が発生しないという動作に安全に依存できますか?.errback(exception_or_failure)