[Twisted-Python] Catching error in protocol.ReconnectingClientFactory

Martin martin at webscio.net
Mon Jun 25 15:47:31 MDT 2012


On 25/06/12 22:27, Adrian Overbury wrote:
> On 25/06/2012, at 10:16 PM, Martin <martin at webscio.net> wrote:
>
>> On 14/06/12 12:38, Martin wrote:
>>> Hi, thanks for your reply.
>>>
>>> Indeed, the ReconnectingClientFactory is being sent the Failure object to
>>>
>>> def clientConnectionLost(self, connector, reason):
>>>         log.msg('Lost connection. Reason: %s' % reason)
>>> protocol.ReconnectingClientFactory.clientConnectionLost(self,
>>> connector, reason)
>>>
>>> where "reason" is the Failure object that is "unhandled". is there
>>> anything I could do to it there to make it handled?
>>>
>>> Also, the documentation in
>>> http://twistedmatrix.com/documents/current/core/howto/defer.html says
>>> that one can do d.addErrback(err.log) to deal with unhandled errors,
>>> but what is d?
>>>
>>> In general, I'm not doing anything special.. I'm creating a
>>> ReconnectingClientFactory and connecting it to a server..
>>> f = MyReconnectingClientFactory(..)
>>> reactor.connectSSL(url, port, f, ssl.ClientContextFactory())
>>> reactor.run()
>>>
>>> Basically it. Any thoughts? Thanks a lot!
>>>> On Jun 11, 2012, at 8:01 AM, Martin wrote:
>>>>
>>>>> Hi there,
>>>>>
>>>>> I've been looking around for a solution for several hours now, and
>>>>> maybe
>>>>> I'm just missing something..
>>>>>
>>>>> I've a factory that implements protocol.ReconnectingClientFactory which
>>>>> works just fine, however, whenever the program ends running, I get a
>>>>> bunch of Unhandled error in Deferred messages in my log for each
>>>>> disconnection that occurred during runtime, such as Failure:
>>>>> twisted.internet.error.ConnectionLost: ...
>>>>>
>>>>> Is there any way I could somehow "handle" these during runtime, so that
>>>>> my log wouldn't be spammed with this at the end.. (or avoid it being
>>>>> spammed somehow..)
>>>> These messages are coming from some code which is issuing Deferreds,
>>>> not from ReconnectingClientFactory.  You need to add an errback to
>>>> those Deferreds in your application code.  There's no way to write a
>>>> catch-all, just like there's no way to write a catch-all that can
>>>> stop exceptions from being raised in basic Python.
>>>>
>>>> I can't say more without a code example, preferably
>>>> a<http://sscce.org/>.
>>>>
>>>> -glyph
>>>>
>>>>
>>>> _______________________________________________
>>>> Twisted-Python mailing list
>>>> Twisted-Python at twistedmatrix.com
>>>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>>>
>>>>
>> No suggestions as to how I could get rid of this? :(
>>
>>
> I believe glyph gave you the answer to that already.  In your example above of d.addErrBack, d is the deferred object.  Each of those needs to have an errback handler attached to it.  If you don't want to see anything out of them, simply don't print anything.
>
>> _______________________________________________
>> 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
>
>
Well, kind of - I know that I need to do addErrBack on the deferred 
objects, I kind of knew that when I asked the original question having 
read the documentation on deferreds. What I still don't know though is 
how am I supposed to catch these deferreds - that is not being explained 
anywhere in the documentation I'm afraid.





More information about the Twisted-Python mailing list