logging - string formating problems

Peter Otten __peter__ at web.de
Mon Apr 6 13:31:43 CEST 2009


Werner F. Bruhin wrote:

> Werner F. Bruhin wrote:
>> I see the following exception with a string formating problem.
>>
>> TypeError: not all arguments converted during string formatting
>> Traceback (most recent call last):
>>  File "/usr/lib/python2.5/logging/__init__.py", line 744, in emit
>>    msg = self.format(record)
>>  File "/usr/lib/python2.5/logging/__init__.py", line 630, in format
>>    return fmt.format(record)
>>  File "/usr/lib/python2.5/logging/__init__.py", line 418, in format
>>    record.message = record.getMessage()
>>  File "/usr/lib/python2.5/logging/__init__.py", line 288, in getMessage
>>    msg = msg % self.args
>>
>> The exception does not give any information on where the problem is
>> coming from.
>>
>> I am using Python 2.5.4 but I see that in 2.6 the code is still the same.
>>
>> Any chance that getMessage could catch this exception and provide
>> better debugging information (i.e. content of msg and self.args).
> I understand that my problem is that the arguments don't match the
> format.  But currently the traceback is not of any help in figuring out
> where this in my code this is.
> 
> So, I suggest that line 288 in getMessage is changed from:
> 
>         msg = msg % self.args
> 
> To something along these lines:
>         if self.args:
>             try:
>                 msg = msg % self.args
>             except:
>                 print 'msg: %s' % msg
>                 print 'args: %s' % self.args
>                 traceback.print_exception(ei[0], ei[1], ei[2])
>         return msg

I would be more interested in the origin of the problem in my code. For that
you need the complete traceback. You might be able to find it by
monkey-patching the Handler.handlError() method, e. g.:

import logging

def handleError(self, record):
    raise

logging.Handler.handleError = handleError

logging.critical("", 42)

Of course you'd only do that while you are debugging the app.

Peter



More information about the Python-list mailing list