Как logging.debug с оператором? - PullRequest
0 голосов
/ 01 мая 2018

Я пытался прекратить использовать операторы print для своей отладки и начать использовать 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

Как мне провести операторский тест с ведением журнала?

1 Ответ

0 голосов
/ 01 мая 2018

Методы модуля протоколирования ожидают, что первый аргумент будет строкой формата, а следующие аргументы принадлежат этой строке формата: logger.debug(fmt_str, arg1,....). Но ваша строка не имеет никаких признаков того, что после нее появится больше элементов.

т.е. в конце концов, logger.debug func попытается сделать что-то вроде этого:

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)

Печатать объекты в файл потока, разделенные sep и последующие end. sep, end и file, если они есть, должны быть заданы в качестве аргументов ключевого слова.

Все аргументы, не являющиеся ключевыми словами, преобразуются в строки, как это делает str () и записывается в поток, отделяется sep и сопровождается end. Оба сент и конец должен быть строками; они также могут быть None, что означает использование значения по умолчанию. Если объекты не указаны, print () просто напишет end.

Поскольку по умолчанию sep является пробелом, python просто смешивает строковое представление вашей строки и значения bool вместе, разделяя их пробелами.

...