Oto co robięPython: Rejestrowanie TypeError: nie wszystkie argumenty przekształcone w ciąg formatowania
>>> import logging
>>> logging.getLogger().setLevel(logging.INFO)
>>> from datetime import date
>>> date = date.today()
>>> logging.info('date={}', date)
Traceback (most recent call last):
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 846, in emit
msg = self.format(record)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 723, in format
return fmt.format(record)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 464, in format
record.message = record.getMessage()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/__init__.py", line 328, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Logged from file <stdin>, line 1
>>>
moją wersję Pythona
$ python --version
Python 2.7.3
Jak zrobić to działa?
wiem, że wykonując formatowanie siebie, tracą przewagę szybkości oferowanej przez pozwalając moduł rejestrowania zrobi to za Ciebie * tylko wtedy, gdy wiadomość jest faktycznie zalogowany *. Innymi słowy, jeśli użyjesz funkcji 'debug()', ale poziom rejestrowania nie obejmuje poziomu DEBUG, nie ponosisz kary za operację formatowania ciągu. Różnica prędkości może być znacząca, jeśli masz dużo komunikatów diagnostycznych. –