Як злавіць выключэнне ў тоўстым ружовым адтэрмінаванай зваротным выкліку?

    from twisted.internet import reactor, defer

def getDummyData(x):
    """
    This function is a dummy which simulates a delayed result and
    returns a Deferred which will fire with that result. Don't try too
    hard to understand this.
    """
    d = defer.Deferred()
    # simulate a delayed result by asking the reactor to fire the
    # Deferred in 2 seconds time with the result x * 3
    reactor.callLater(2, d.callback, x * 3)
    return d

def printData(d):
    """
    Data handling function to be added as a callback: handles the
    data by printing the result
    """
    raise ValueError('IIIGGAA')
    print d

def nextCall(d):
    import pdb; pdb.set_trace()
d = getDummyData(3)

d.addErrback(nextCall).addCallback(printData).addErrback(nextCall).addCallback(nextCall)


# manually set up the end of the process by asking the reactor to
# stop itself in 4 seconds time
reactor.callLater(1, reactor.stop)
# start up the Twisted reactor (event loop handler) manually
reactor.run()

функцыянаваць nextCall - ніколі не тэлефануе. Так былі я магу знайсці ValueError?

Дзякуючы.

2

1 адказы

Гэта ніколі не называюць, таму што код пад каментарый, які кажа, што ён просіць рэактар, каб спыніць сябе ў 4 секунд на самай справе просіць рэактар, каб спыніць сябе ў 1 секунду. 2-другі callLater ніколі не выклікаецца, таму <код ня> d гэта не страляў, так nextCall ніколі не выклікаецца.

Можа быць, вы павінны паспрабаваць будаваць гэты прыклад без выкарыстання рэактара, проста шляхам выкліку зваротнага выкліку на адпаведны адкладзены сінхронна? Вам не патрэбен рэактар ​​агонь просты Адкладзены і важдацца з імі сінхронна можа дапамагчы даць вам больш дакладнае ўяўленне пра тое, што менавіта адбываецца, калі.

4
дададзена
вы маеце рацыю, дзякуй!. Я не undestand. Як я прапусціў гэта?!?
дададзена аўтар Oduvan, крыніца