gpt4 book ai didi

具有格式化程序的 Python 日志记录模块导致 AttributeError

转载 作者:太空狗 更新时间:2023-10-29 22:06:33 24 4
gpt4 key购买 nike

我正在编写一个终端应用程序,在传入 -v 选项后,毫不奇怪,它会变得冗长。我想在终端中提供输出,以便于测试(无论如何,当以 cron 运行时它会被重定向到日志文件)。

但是,python logging 模块不允许我在使用格式化程序时写出相应级别的消息。 (Formatter直接从Python Logging Cookbok复制而来)

此行为不仅限于 Python3。 Python2.7 在给定条件下引发相同的异常。


一个.py

from sys import stdout
import logging

if __name__ == '__main__':

level = 20

log = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.StreamHandler(stdout).setFormatter(formatter)
log.addHandler(handler)
log.setLevel(level)

log.info("Blah")

一个.py输出

Traceback (most recent call last):
File "/home/tlevi/PycharmProjects/untitled/main.py", line 14, in <module>
log.info("Blah")
File "/usr/lib/python3.4/logging/__init__.py", line 1279, in info
self._log(INFO, msg, args, **kwargs)
File "/usr/lib/python3.4/logging/__init__.py", line 1414, in _log
self.handle(record)
File "/usr/lib/python3.4/logging/__init__.py", line 1424, in handle
self.callHandlers(record)
File "/usr/lib/python3.4/logging/__init__.py", line 1485, in callHandlers
if record.levelno >= hdlr.level:
AttributeError: 'NoneType' object has no attribute 'level'

two.py(就像一个魅力)

from sys import stdout
import logging

if __name__ == '__main__':

level = 20

log = logging.getLogger()
handler = logging.StreamHandler(stdout)
log.addHandler(handler)
log.setLevel(level)

log.info("Blah")

two.py 输出

Blah

最佳答案

代替

handler = logging.StreamHandler(stdout).setFormatter(formatter)

尝试:

handler = logging.StreamHandler(stdout)
handler.setFormatter(formatter)

发生的事情是,在第一种情况下,您将 setFormatter() 的返回分配给 handler 变量,但是 setFormatter() 不返回处理程序(即它返回 None)

关于具有格式化程序的 Python 日志记录模块导致 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com