Я пытался перестать использовать операторы печати для отладки и начать использовать logging.debug. Я могу использовать оператор в печати, но ведение журнала, похоже, не делает то же самое.
Например, это работает
print('Is between now and then: ', solar_noon < now < solarnoonplustimeunit )
а это не так.
logger.debug('Is between now and then: ', solar_noon < now < solarnoonplustimeunit )
Последний говорит:
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 859, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 732, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 471, in format
record.message = record.getMessage()
File "/usr/lib/python2.7/logging/__init__.py", line 335, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Как мне провести операторский тест с логированием?
Методы модуля регистрации ожидают, что первый аргумент будет строкой формата, а следующие аргументы будут принадлежать этой строке формата: logger.debug(fmt_str, arg1,....)
. Но в вашей строке нет никаких указаний на то, что за ней последуют другие элементы.
то есть функция logger.debug в конечном итоге попытается сделать что-то вроде этого:
fmt_str % (arg1, arg2, ...)
Попробуйте просто добавить формат str %s
:
logger.debug('Is between now and then: %s', solar_noon < now < solarnoonplustimeunit )
print
:Согласно документы:
print(*objects, sep=' ', end='\n', file=sys.stdout)
Print objects to the stream file, separated by sep and followed by end. sep, end and file, if present, must be given as keyword arguments.
All non-keyword arguments are converted to strings like str() does and written to the stream, separated by sep and followed by end. Both sep and end must be strings; they can also be None, which means to use the default values. If no objects are given, print() will just write end.
Поскольку по умолчанию sep
- это пробел, python просто смешивает строковое представление ваших строковых и логических значений вместе, разделяя их пробелами.
Я предполагаю, что Print принимает строку и печатает ее?
@Rich - к моему ответу добавлено объяснение поведения print
Первый аргумент - это строка формата. Попробуй в конце добавить
%s
!