[Twisted-Python] eated traceback when decorate method already decorated by inlineCallbacks

Sergey Gerasimov sergun at gmail.com
Fri Mar 15 15:03:33 EDT 2013



14.03.2013, в 18:20, exarkun at twistedmatrix.com написал(а):

> On 09:40 am, sergun at gmail.com wrote:
>> Hello to all!
>> 
>> Why traceback doesn't include call of g() here?
> 
> Tracebacks are tricky, and inlineCallbacks doesn't make them look 
> exactly like they would look if you didn't have Deferreds.
> 
> twisted.python.failure is a little bit better at handling tracebacks 
> from this sort of code than the traceback module is, so if you write the 
> code like this things will at least be a little better:
> 
>    from twisted.python.failure import Failure
> 
>    def decor1():
>        try:
>            res = yield f(*argv, **kw)
>        except:
>            Failure.printTraceback()
>        else:
>            defer.returnValue(res)

How can I catch failure?

In your example you call printTraceback as classmethod but it is instance one.



> Notice also that I moved returnValue outside of the try block. 
> `returnValue` is implemented using exceptions, so you *must not* catch 
> and handle the exception it raises or it won't work.

Thanks for that detail!

> 
> Jean-Paul
>> import traceback
>> from twisted.internet import defer, reactor
>> 
>> def decor1(f, *argv, **kw):
>>   @defer.inlineCallbacks
>>   def decor1():
>>       try:
>>           res = yield f(*argv, **kw)
>>           defer.returnValue(res)
>>       except:
>>           traceback.print_exc()
>>   return decor1
>> 
>> @defer.inlineCallbacks
>> def g():
>>   raise AttributeError
>>   yield defer.succeed(1)
>> 
>> @decor1
>> @defer.inlineCallbacks
>> def f():
>>   yield g()
>> 
>> f()
>> reactor.run()
>> 
>> I see just:
>> Traceback (most recent call last):
>> File "C:\testing\test.py", line 9, in decor1
>>   res = yield f(*argv, **kw)
>> AttributeError
>> 
>> 
>> 
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
> 
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python



More information about the Twisted-Python mailing list