warnings.warn()和logging.warn()在做什么和应该如何使用方面有什么不同?
发布于 2013-02-07 22:18:25
我同意另一个答案-- logging用于日志记录,warning用于警告--但我想补充更多细节。
下面是一个教程式的如何引导您完成使用logging模块的步骤。https://docs.python.org/3/howto/logging.html
它直接回答了你的问题:
库代码中的warnings.warn(),如果该问题是可以避免的,并且客户端应用程序应该被修改以消除警告 如果客户端应用程序无法处理这种情况,则logging.warning(),但仍应注意该事件
发布于 2016-06-22 23:14:26
logging.warning只是在WARNING级别记录一些东西,就像logging.info在INFO级别上记录和logging.error在ERROR级别上记录一样。它没有什么特别的行为。
warnings.warn发出一个Warning,它可能被打印到stderr,完全忽略,或者像普通的Exception那样抛出(可能会使应用程序崩溃),这取决于发出的精确的Warning子类和如何配置警告筛选器。默认情况下,警告将打印到stderr或被忽略。
warnings.warn发出的警告通常很有用,但很容易被忽略(特别是当您在后台进程中运行Python程序而不捕获stderr时)。由于这个原因,记录它们可能会很有帮助。
Python提供了logging模块和warnings模块之间的内置集成,让您可以这样做;只要在脚本开始时调用logging.captureWarnings(True),那么由warnings模块发出的所有警告都将自动记录在WARNING级别。
发布于 2016-11-18 01:03:47
库代码中的warnings.warn(),如果该问题是可以避免的,并且客户端应用程序应该被修改以消除警告 如果客户端应用程序无法处理这种情况,则logging.warning(),但仍应注意该事件
同样值得注意的是,默认情况下,warnings.warn("same message")只会出现一次。这是一个明显的重大差异。引用自官方医生
对于同一源位置的特定警告的重复通常被抑制。
>>> import warnings
>>> warnings.warn("foo")
__main__:1: UserWarning: foo
>>> warnings.warn("foo")
>>> warnings.warn("foo")
>>>
>>> import logging
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>>
>>>
>>> warnings.warn("fur")
__main__:1: UserWarning: fur
>>> warnings.warn("fur")
>>> warnings.warn("fur")
>>>https://stackoverflow.com/questions/9595009
复制相似问题