如何忽略Python中的弃用警告

我总是听到这个:

DeprecationWarning: integer argument expected, got float

我怎样才能让这条信息消失?在Python中有避免警告的方法吗?

286487 次浏览

传递正确的参数?: P

更严重的是,您可以在命令行中将参数-Wi::DeprecationWarning传递给解释器,以忽略弃用警告。

将实参转换为int。这很简单

int(argument)

warnings模块的文档中:

 #!/usr/bin/env python -W ignore::DeprecationWarning

如果你在Windows上:将-W ignore::DeprecationWarning作为参数传递给Python。不过更好的解决方法是强制转换为int

(注意,在Python 3.2中,默认情况下会忽略弃用警告。)

并不是要痛打你,而是警告你,当你下次升级python时,你正在做的事情可能会停止工作。转换为int并完成它。

< p >顺便说一句。您还可以编写自己的警告处理程序。只要分配一个什么都不做的函数。 如何重定向python警告自定义流? < / p >

你应该修改你的代码,但以防万一,

import warnings
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()

现在你仍然得到所有其他__abc,但不是由以下原因引起的:

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装饰器

这些答案都不适合我,所以我将发布我的方法来解决这个问题。我使用下面的at the beginning of my 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...

码头工人的解决方案

  • 在运行python应用程序之前禁用所有警告
    • 您也可以禁用dockerized测试
ENV PYTHONWARNINGS="ignore::DeprecationWarning"

如果你知道你在做什么,另一种方法就是找到警告你的文件(文件的路径显示在警告信息中),注释生成警告的行。

Python 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")

如果你正在使用logging (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.htmlhttps://docs.python.org/3/library/logging.html#logging.captureWarningscaptureWarnings设置为True不会捕获警告

在我的例子中,我用日志系统格式化了所有的异常,但是警告(例如scikit-learn)没有受到影响。

注释掉下面文件中的警示线:

lib64/python2.7/site-packages/cryptography/__init__.py

有点粗糙,但它为我工作后,上述方法没有。

。/ myscrypt.py 2在/ dev / null