gpt4 book ai didi

python - 是否应该只在 except block 内调用 logger.exception?为什么?

转载 作者:太空狗 更新时间:2023-10-30 02:45:23 25 4
gpt4 key购买 nike

logger.exception 的文档提及:

This method should only be called from an exception handler.

所以用法应该是这样的:

try:
errorerrorerror
except NameError as e:
logger.exception('debug message %s', e)

但是当我尝试以“错误”的方式进行时,行为似乎是一样的:

try:
errorerrorerror
except NameError as e:
pass

logger.exception('debug message %s', e)

文档中提到的警告的原因是什么? 实际上我们只能在 except block 中使用它是真的吗,出于一些此处不明显的微妙原因?

最佳答案

该方法设计用于异常处理程序。因此,文档通过使用单词应该告诉您这一点,而不是必须

在标准文本中,应该必须被严格定义;一种意思是我们建议您这样做,如果您这样做会好得多,另一种意思是如果您不这样做,那将是一个彻头彻尾的错误。参见 RFC 2119 IETF 特别工作组的措辞。

所有 logging.exception() 所做的是在调用 logging.error() 之前设置 exc_info 关键字参数。 exc_info 参数随后被充实以包括最近处理的异常,取自 sys.exc_info() .然后由格式化程序来包含异常消息(通过 Formatter.format_exception() method )来格式化异常。

因为 sys.exc_info()except 套件和外部都有效,所以两种变体都有效。从代码文档的角度来看,如果您在except 处理程序中使用它会更清楚。

您不需要包含错误消息,真的,因为您的日志格式化程序应该已经为您完成了:

logger.exception('debug message 2')  # exception should be included automatically

您可以通过以下方式明确地将异常附加到任何日志消息:

logger.error('debug message 2', exc_info=sys.exc_info())

或任何其他具有异常类型、异常值和回溯的三元组值。或者,设置 exc_info=1 让记录器从 sys.exc_info() 本身检索信息。

请参阅 Logger.debug() 的文档:

exc_info which, if it does not evaluate as false, causes exception information to be added to the logging message. If an exception tuple (in the format returned by sys.exc_info()) is provided, it is used; otherwise, sys.exc_info() is called to get the exception information.

关于python - 是否应该只在 except block 内调用 logger.exception?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802690/

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