やや単純なツイストPythonコードを理解するのに問題があります。私がドキュメントで赤字にしていることから、ここのコードは未処理のエラーなしで機能するはずです。
私はこれを手に入れます:
HELLO!
HANDLED!
HANDLED 2!
Unhandled error in Deferred:
Unhandled Error
Traceback (most recent call last):
File "package_tester.py", line 31, in <module>
a().callback(2)
File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 368, in callback
self._startRunCallbacks(result)
File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 464, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 551, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "package_tester.py", line 5, in c
raise Exception()
exceptions.Exception:
連鎖延期による失敗はend()errbackに渡されませんか?
何らかの理由で、Bulaの投稿の下にコメントすることはできません。
単に追加するだけで、「unexpected1.py」の動作を回避することができました。
@defer.inlineCallbacks
def sync_deferred(self, result, deferred):
"""
Wait for a deferred to end before continuing.
@param deferred: deferred which will be waited to finish so the chain
can continue.
@return: result from the deferred.
"""
r = yield deferred
defer.returnValue(r)
すべてのchainDeferredの後にsync_deferredが実行されます。この場合、親がこの結果を続行できるように、子の遅延の結果を「待機」する必要があります。