如何在Python中忽略弃用警告


175

我不断得到这个:

DeprecationWarning: integer argument expected, got float

我如何使此消息消失?有没有一种方法可以避免Python中的警告?

Answers:


121

warnings模块的文档中:

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

如果您使用的是Windows,请-W ignore::DeprecationWarning作为参数传递给Python。最好通过强制转换为int来解决问题。

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


8
希望我可以完成这项工作...出现/usr/bin/env: python -W ignore::DeprecationWarning: No such file or directory错误。如果我-W ignore::DeprecationWarning在命令行上使用python 选项运行它,那么它会起作用,但是/ usr / bin / env不会处理它。
weronika 2011年

4
似乎是仅Windows的解决方案。
Daniel Miles

15
您可以设置env变量PYTHONWARNINGS,这对我来说export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"是无效的,它会从sorl禁用django json贬值警告
yvess 2014年

@yvess,如果这是一个答案,我会投票赞成。似乎是一种忽略系统范围内特定警告的干净方法。我把它放在我的〜/ .profile中。效果很好。
allanberry 2014年

您好,我们可以如何将“弃用警告”消息转换为类型信息消息。我只想在控制台上显示该消息,而不将其分类为任何类型的警告。
克里希纳(Krishna Oza)

194

您应该只修复代码,以防万一,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 

2
使用iPython为我工作
zbinsd 2013年

21
这对我根本不起作用,仍然会出现弃用警告。
user1244215 2013年

8
@ user1244215我可能是错的,但是我认为在您的代码中的哪个位置运行都很重要warnings.filterwarnings("ignore", category=DeprecationWarning)。我认为您必须在导入吐出警告的库之后运行此命令,尽管我可能会误会。
杰克·凯利

1
需要@CodingYourLife类别,因此您仍然会看到其他类型的警告,例如RuntimeWarning等。–
ismail

1
就我而言,引起警告的代码是from xgboost import XGBClassifier。我必须warnings.filterwarnings("ignore", category=DeprecationWarning)在导入之前立即将其投入使用。
sedeh

192

我有这些:

/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()

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

import md5, sha

2
太好了,非常感谢!(花点时间意识到我还可以在其中包装非导入的代码,因为某些软件包在导入后使用时也会生成DeprecationWarnings。)一种非常好的方法,仅使我已经查看并决定的特定DeprecationWarning静音。我想忽略。
weronika 2011年

29

我发现最干净的方法(尤其是在Windows上)是通过将以下内容添加到C:\ Python26 \ Lib \ site-packages \ sitecustomize.py:

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

请注意,我必须创建此文件。当然,如果您的路径不同,请更改python的路径。


25

这些答案都不适合我,因此我将发布解决方法。我使用以下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...


4
在所有其他解决方案都没有的情况下,这种方法行得通。谢谢!
cxxl

这也救了我。很高兴能为您提供帮助。
seralouk

对于AstroPy弃用警告,在3.7.3中不起作用。:(
ingyhere

6

通过正确的论点?:P

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



4

当您只想在功能中忽略警告时,可以执行以下操作。

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


4

Docker解决方案

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

3

如果您使用的是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")


0

如果您知道自己在做什么,另一种方法就是简单地找到警告您的文件(该文件的路径显示在警告信息中),对生成警告的行进行注释。



-2

不会打扰您,但会警告您,下次升级python时,您正在做的事情可能会停止工作。转换为int并完成它。

顺便说一句。您还可以编写自己的警告处理程序。只需分配一个不执行任何操作的函数即可。 如何将python警告重定向到自定义流?


4
该建议仅在确实是他自己的代码的情况下才有效,而不是来自某些第三方软件包。
Christopher Barber's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.