提问人:Mohammed 提问时间:5/19/2009 最后编辑:kaya3Mohammed 更新时间:11/4/2022 访问量:341599
如何忽略 Python 中的弃用警告
How to ignore deprecation warnings in Python
问:
我一直得到这个:
DeprecationWarning: integer argument expected, got float
如何使此消息消失?有没有办法避免 Python 中的警告?
答:
传递正确的参数?:P
更严重的是,您可以在命令行上将参数 -Wi::D eprecationWarning 传递给解释器以忽略弃用警告。
将参数转换为 int。就这么简单
int(argument)
从警告
模块的文档中:
#!/usr/bin/env python -W ignore::DeprecationWarning
如果您使用的是 Windows:作为参数传递给 Python。更好的是解决这个问题,通过强制转换为 int。-W ignore::DeprecationWarning
(请注意,在 Python 3.2 中,默认情况下会忽略弃用警告。
评论
/usr/bin/env: python -W ignore::DeprecationWarning: No such file or directory
-W ignore::DeprecationWarning
export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"
不要为此而殴打你,而是警告你,当你下次升级 python 时,你正在做的事情可能会停止工作。转换为 int 并完成它。
顺便说一句。您还可以编写自己的警告处理程序。只需分配一个不执行任何操作的函数即可。如何将 python 警告重定向到自定义流?
评论
你应该修复你的代码,但以防万一,
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
评论
warnings.filterwarnings("ignore", category=DeprecationWarning)
from xgboost import XGBClassifier
warnings.filterwarnings("ignore", category=DeprecationWarning)
我有这些:
/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/persisted/sob.py:12:
DeprecationWarning: the md5 module is deprecated; use hashlib instead import os, md5, sys
/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/python/filepath.py:12:
DeprecationWarning: the sha module is deprecated; use the hashlib module instead import sha
用以下方法修复它:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore",category=DeprecationWarning)
import md5, sha
yourcode()
现在你仍然会得到所有其他的s,但不是由以下原因引起的:DeprecationWarning
import md5, sha
评论
我发现最干净的方法(尤其是在 Windows 上)是将以下内容添加到 C:\Python26\Lib\site-packages\sitecustomize.py:
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
请注意,我必须创建此文件。当然,如果您的路径不同,请将路径更改为 python。
如果只想忽略函数中的警告,可以执行以下操作。
import warnings
from functools import wraps
def ignore_warnings(f):
@wraps(f)
def inner(*args, **kwargs):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("ignore")
response = f(*args, **kwargs)
return response
return inner
@ignore_warnings
def foo(arg1, arg2):
...
write your code here without warnings
...
@ignore_warnings
def foo2(arg1, arg2, arg3):
...
write your code here without warnings
...
只需在要忽略所有警告的函数上添加@ignore_warnings装饰器
这些答案都不适合我,所以我将发布我的方法来解决此问题。我在 main.py 脚本的开头
使用以下内容,它工作正常。
按原样使用以下内容(复制粘贴):
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
例:
import "blabla"
import "blabla"
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
# more code here...
# more code here...
评论
warnings.warn = lambda *args, **kwargs: None
Docker 解决方案
- 在运行 python 应用程序之前禁用所有警告
- 您也可以禁用 dockerized 测试
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
如果您知道自己在做什么,另一种方法是简单地找到警告您的文件(文件的路径显示在警告信息中),注释生成警告的行。
评论
蟒蛇 3
在编写代码之前,只需写下以下易于记忆的行:
import warnings
warnings.filterwarnings("ignore")
对于 python 3,只需编写以下代码即可忽略所有警告。
from warnings import filterwarnings
filterwarnings("ignore")
如果您使用的是 Python3,请尝试以下代码:
import sys
if not sys.warnoptions:
import warnings
warnings.simplefilter("ignore")
或者试试这个...
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
或者试试这个...
import warnings
warnings.filterwarnings("ignore")
如果使用日志记录 (https://docs.python.org/3/library/logging.html) 来格式化或重定向 ERROR、NOTICE 和 DEBUG 消息,则可以将 WARNINGS 从警告系统重定向到日志记录系统:
logging.captureWarnings(True)
它将捕获带有标记“py.warnings”的警告。此外,如果要在不记录的情况下丢弃这些警告,则可以使用以下命令将日志记录级别设置为 ERROR:
logging.getLogger("py.warnings").setLevel(logging.ERROR)
它将导致所有这些警告被忽略,而不会出现在您的终端或其他任何地方。
请参阅 https://docs.python.org/3/library/warnings.html 和 https://docs.python.org/3/library/logging.html#logging.captureWarnings 和 captureWarnings 设置为 True 不会捕获警告
就我而言,我使用日志记录系统格式化了所有异常,但警告(例如 scikit-learn)不受影响。
注释掉以下文件中的警告行:
lib64/python2.7/site-packages/cryptography/__init__.py
有点粗糙,但在上述方法没有之后,它对我有用。
./myscrypt.py 2>/dev/null
为了添加到以前的解决方案中,如果在某些并行应用程序(例如使用 )中继续收到警告,则可能还需要将警告筛选器传递给子进程。你可以用这样的东西来做到这一点:multiprocessing
import sys, os
if not sys.warnoptions:
import warnings
warnings.simplefilter("ignore")
os.environ["PYTHONWARNINGS"] = "ignore"
添加该行将导致子进程也忽略警告。os.environ
评论
$ pip install shutup
import shutup;shutup.please()