【问题标题】:How to ignore deprecation warnings in Python如何忽略 Python 中的弃用警告
【发布时间】:2010-10-27 02:56:30
【问题描述】:

我不断收到这个:

DeprecationWarning: integer argument expected, got float

如何让这条消息消失?有没有办法避免 Python 中的警告?

【问题讨论】:

  • 当没有其他工作时:$ pip install shutup。然后在代码的顶部import shutup;shutup.please()。这将禁用所有警告。

标签: python warnings deprecated


【解决方案1】:

你应该只是修复你的代码,但以防万一,

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

【讨论】:

  • 使用 iPython 为我工作
  • 这对我根本不起作用,仍然看到弃用警告。
  • @user1244215 我可能错了,但我认为在代码中运行warnings.filterwarnings("ignore", category=DeprecationWarning) 的位置很重要。我认为您必须在导入发出警告的库后运行它,尽管我可能弄错了。
  • @CodingYourLife 类别是必需的,因此您仍会看到其他类型的警告,例如 RuntimeWarning 等。
  • 在我的例子中,导致警告的代码是from xgboost import XGBClassifier。我必须在导入之前立即输入 warnings.filterwarnings("ignore", category=DeprecationWarning) 才能使其正常工作。
【解决方案2】:

我有这些:

/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

【讨论】:

  • 太棒了,非常感谢!! (我花了一点时间才意识到我也可以在其中包装非导入的代码位,因为一些包在导入后使用时也会生成 DeprecationWarnings。)非常好的方法只使我已经看过并决定的特定 DeprecationWarnings 静音我想忽略。
【解决方案3】:

来自warnings module的文档:

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

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

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

【讨论】:

  • 我希望我能完成这项工作...我收到 /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directory 错误。如果我在命令行上使用-W ignore::DeprecationWarning 选项运行python,它可以工作,但/usr/bin/env 不处理它。
  • 似乎是一个仅限 Windows 的解决方案。
  • 你可以设置环境变量 PYTHONWARNINGS 这对我有用export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson" 来禁用来自 sorl 的 django json deprication 警告
  • @yvess,如果这是一个答案,我会投赞成票。似乎是一种忽略系统范围内特定警告的干净方法。我把它放在我的 ~/.profile 中。效果很好。
  • 您好,我们能否将这条弃用警告消息转换为类型信息的消息。我想要的只是在控制台上显示消息而不被归类为任何类型的警告。
【解决方案4】:

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

【讨论】:

  • 当所有其他解决方案都不起作用时,它起作用了。谢谢!
  • 这也救了我。很高兴我能提供帮助。
  • 在 3.7.3 中不适用于 AstroPy 弃用警告。 :(
  • 我已将此解决方案包装在一个库中:然后在代码顶部导入shutup;shutup.please()。这将禁用所有警告。
【解决方案5】:

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

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

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

【讨论】:

    【解决方案6】:

    Docker 解决方案

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

    【讨论】:

      【解决方案7】:

      Python 3

      在编写代码之前,只需在下面写下容易记住的行:

      import warnings
      
      warnings.filterwarnings("ignore")
      

      【讨论】:

        【解决方案8】:

        传递正确的参数? :P

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

        【讨论】:

          【解决方案9】:

          如果您只想忽略函数中的警告,您可以执行以下操作。

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

          【讨论】:

            【解决方案10】:

            将参数转换为 int。就这么简单

            int(argument)
            

            【讨论】:

              【解决方案11】:

              对于 python 3,只需编写以下代码即可忽略所有警告。

              from warnings import filterwarnings
              filterwarnings("ignore")
              

              【讨论】:

                【解决方案12】:

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

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                  • 如果警告来自第三方库怎么办?
                  【解决方案14】:

                  如果您使用日志记录 (https://docs.python.org/3/library/logging.html) 来格式化或重定向您的错误、通知和调试消息,您可以将警告从警告系统重定向到日志记录系统:

                  logging.captureWarnings(True)
                  

                  https://docs.python.org/3/library/warnings.htmlhttps://docs.python.org/3/library/logging.html#logging.captureWarnings

                  就我而言,我正在使用日志记录系统格式化所有异常,但警告(例如 scikit-learn)不受影响。

                  【讨论】:

                    【解决方案15】:

                    这不是为了打败你,而是警告你,当你下次升级 python 时,你正在做的事情可能会停止工作。转换为 int 即可。

                    顺便说一句。您还可以编写自己的警告处理程序。只需分配一个什么都不做的函数。 How to redirect python warnings to a custom stream?

                    【讨论】:

                    • 该建议只有在确实是他自己的代码而不是来自某个 3rd 方包的情况下才有效。
                    【解决方案16】:

                    注释掉以下文件中的警告行

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

                    【讨论】:

                      猜你喜欢
                      • 2016-10-03
                      • 1970-01-01
                      • 2018-12-09
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多