Skip to content Skip to sidebar Skip to footer

How Do I Get The Line Number For A Logging Typeerror Of "not All Arguments Converted During String Formatting"?

If I'm using the built-in python logging mechanism and I make a mistake, such as: logger.debug('The result is', result) Then I get an unhelpful error message: Traceback (most rece

Solution 1:

Thanks to Greg Smith, this is easy to do. Wherever the logging code is set up, do:

import logging

defhandleError(self, record):
    raise
logging.Handler.handleError = handleError

Somewhere in the stack trace will be the offending call to logger.debug. Note the caveat:

Note that just inserting an error handler like this isn't what you want to deploy, because an error in logging should introduce an application error. It's really more for making sure you get all your log messages correct in the first place. Make sure you read and following through understanding the comments about how handleError works later in the message thread before leaving this error dumping code in your app permanently.

Solution 2:

In recent versions of Python, the information you want is printed. Consider the following script, logex.py:

importlogginglogger= logging.getLogger(__name__)

def test():
    logger.debug('The result is ', 'abc')

def main():
    test()

if__name__== '__main__':
    logging.basicConfig(level=logging.DEBUG)
    main()

When this is run with Python 2.7:

$ python logex.py
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 842, in emit
    msg = self.format(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 719, informatreturn fmt.format(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 464, informat
    record.message = record.getMessage()
  File "/usr/lib/python2.7/logging/__init__.py", line 328, in getMessage
    msg = msg % self.args
TypeError: notall arguments converted during string formatting
Logged from file logex.py, line 6

With Python 3.2:

$ python3.2 logex.py
Traceback (most recent call last):
  File "/usr/lib/python3.2/logging/__init__.py", line 937, in emit
    msg = self.format(record)
  File "/usr/lib/python3.2/logging/__init__.py", line 812, informatreturn fmt.format(record)
  File "/usr/lib/python3.2/logging/__init__.py", line 551, informat
    record.message = record.getMessage()
  File "/usr/lib/python3.2/logging/__init__.py", line 319, in getMessage
    msg = msg % self.args
TypeError: notall arguments converted during string formatting
Logged from file logex.py, line 6

So, you shouldn't have to resort to any tricks as suggested in Claudiu's answer, unless you are using an older version of Python.

Post a Comment for "How Do I Get The Line Number For A Logging Typeerror Of "not All Arguments Converted During String Formatting"?"