gpt4 book ai didi

python - 如何阻止方法内部的警告

转载 作者:行者123 更新时间:2023-11-28 21:13:50 25 4
gpt4 key购买 nike

所以我使用的是来自第三方库的 method_x,每次我使用它时都会打印一条警告。因为我正在编写一些旨在从 cli 获取用户输入的代码,所以我想阻止这种烦人的打印。

import module_x

module_x.method_x() # Has expected behaviour but prints an annoying warning

我可以做些什么来阻止函数内的所有打印语句吗?也许用某些东西包装方法或暂时禁用标准输出?

编辑:我最终使用了日志记录模块的一种方法,该方法捕获警告并将它们重定向到日志文件。这是我制作的装饰器:

logging.basicConfig(filename='log/log', level=logging.WARNING)

class redirect_warnings_to_log(object):
def __init__(self, f):
self.f = f

def __call__(self, args):
logging.captureWarnings(True)
self.f(args)
logging.captureWarnings(False)

这是打印警告的修饰方法:

@redirect_warnings_to_log
def tweet(message):
twt = api.PostUpdate(message)

最佳答案

正如问题所说-

I'm using method_x from a third party library which prints a warning every time I use it.

如果 method_x 使用 Python 的 warnings模块。然后你可以使用warnings.catch_warnings()连同 with 语句和 warnings.simplefilter()忽略警告,从而抑制警告。

例子-

>>> import warnings
>>> def f():
... warnings.warn("Some warning!")
...
>>> f()
__main__:2: UserWarning: Some warning!
>>> with warnings.catch_warnings():
... warnings.simplefilter("ignore")
... f()
...

请注意,这只是暂时抑制警告,仅在 with block 内,在 if block 外使用 f() 时,它不会抑制那些警告.


来自 documentation -

While within the context manager all warnings will simply be ignored. This allows you to use known-deprecated code without having to see the warning while not suppressing the warning for other code that might not be aware of its use of deprecated code. Note: this can only be guaranteed in a single-threaded application. If two or more threads use the catch_warnings context manager at the same time, the behavior is undefined.

关于python - 如何阻止方法内部的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32314071/

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