我一直在尝试停止使用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
如何通过记录进行操作员测试?
答案 0 :(得分:1)
logging模块方法要求第一个参数是格式字符串,并且以下args属于该格式字符串:logger.debug(fmt_str, arg1,....)
。但是你的字符串没有任何迹象表明会有更多元素出现。
即。 logger.debug func最终会尝试这样做:
fmt_str % (arg1, arg2, ...)
尝试添加格式为%s
:
logger.debug('Is between now and then: %s', solar_noon < now < solarnoonplustimeunit )
print
一起使用:根据docs:
print(* objects,sep ='',end ='\ n',file = sys.stdout)
将对象打印到流文件,以sep分隔,然后结束。 sep,end和file(如果存在)必须作为关键字参数给出。
所有非关键字参数都转换为字符串,如str()和 写入流,由sep分隔,然后结束。两个sep 并且必须是字符串;它们也可以是None,这意味着使用 默认值。如果没有给出对象,print()将只写入结束。
由于默认sep
是一个空格,python只是将字符串的字符串表示和bool值混合在一起,用空格分隔它们。