gpt4 book ai didi

python - 我使用的是 "warnings"模块吗?

转载 作者:行者123 更新时间:2023-12-01 04:35:11 27 4
gpt4 key购买 nike

我在解析配置文件时使用它来发出警告。执行此操作时可能会发生各种错误 - 有些是致命的,有些则不是。所有这些非 fatal error 不应中断解析,但也不能逃避用户的注意。这就是警告模块的用武之地。

我目前正在这样做(伪代码):

while parsing:
try:
get dictionary["token"]
except KeyError:
warnings.warn("Looks like your config file don't have that token")

这一切看起来可读且舒适,但消息看起来像这样:

C:\Users\Renae\Documents\test.py:3: UserWarning: Looks like your config file don't have that token
warnings.warn("Looks like your config file don't have that token")

为什么打印了两次?我应该在发出警告之前进行某种初始化(例如日志记录模块)吗?标准文档没有这方面的教程(或者有吗?)。

警告与 print()、stdout 或 stderr 有何区别?

最佳答案

当您使用warnings模块时,第二次打印实际上是堆栈,您可以使用stacklevel参数控制要打印的级别。示例-

import warnings
def warn():
warnings.warn("Blah",stacklevel=2)

warn()

结果 -

a.py:6: UserWarning: Blah
warn()

如果将其设置为不存在的级别,在上面的示例中假设为 3 ,那么它不会打印堆栈,示例 -

def warn():
warnings.warn("Blah",stacklevel=3)

结果-

sys:1: UserWarning: Blah

正如您所看到的,该文件也更改为 sys:1 。您可能想在那里显示一个有意义的堆栈(对于引发警告的函数的调用者,可能类似于 stacklevel=2 )。

抑制这种情况的另一种方法是使用 warnings.warn_explicit()方法并手动传入文件名和行号(行号中不应包含任何实际代码,否则该代码将被打印),尽管我不建议这样做。

<小时/>

此外,是的,当使用 warnings 模块时,数据通常会进入 sys.stderr ,但您也可以通过使用不同的函数轻松将警告发送到不同的文件,例如-warnings.showwarning()

关于python - 我使用的是 "warnings"模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31823822/

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