如何在Python中压制警告信息

603 阅读4分钟

问题的提出和解决方案概述

这篇文章将告诉你如何抑制Python脚本中的警告信息。

Python 中的警告信息通常用于通知编码者他们的脚本可能存在的问题。 警告可以告知编码者任何过时的或陈旧的元素。一个例子是如果一个插件或模块不再使用(过时)。

抑制这些警告的一个很好的理由是,在做出适当的调整之前保持脚本的可行性。


💬 问题是:我们如何编写代码来抑制这些警告*?*

我们可以通过以下方法之一来完成这项任务。

  • 方法1 :用 "禁止警告 "来抑制警告[`filterwarnings()`](https://docs.python.org/3/library/warnings.html)
  • 方法2 :用 "禁止特定警告 "的方法来抑制警告。[`filterwarnings()`](https://docs.python.org/3/library/warnings.html)
  • 方法3 :用 "禁止警告 "来抑制警告 catch_arnings()
  • 方法4:禁止使用警告 shutup()
  • 方法5:用 "禁止警告 "来抑制警告。-W

方法1:用 filterwarnings() 抑制警告

这个例子使用了Python的内置警告库,并调用了 warn()函数。如果代码遇到问题,这个函数会生成并显示一个警告信息。 然而,这并不能终止脚本。

import warnings

warnings.filterwarnings('ignore')
print('The script still runs.')

要抑制脚本中的任何警告,请导入警告库,并把 filterwarnings()函数的参数ignore 。这样就可以通过无缝抑制所有的警告来使脚本继续运行。

这个脚本的输出被发送到终端。

The script still runs.

除了使用ignore ,还可以为你的Python脚本提供其他选项。

参数说明
默认值传递这个参数将输出第一次出现的匹配警告。这个语句将包括模块名称和发生警告的行。
错误这个参数将把任何警告信息转换为错误信息,如果产生了一个错误信息。适合于调试的目的。
ignore这个参数完全忽略任何匹配的警告信息。不建议这样做,因为这些警告需要在将来的某个时候处理。始终以干净的代码为目标。
总是这个参数输出任何匹配的警告信息。也适用于调试的目的。
模块这个参数只显示一次警告信息。这与它出现的次数无关。
一次这个参数对第一次出现的警告信息显示一次,与它出现的位置无关。

💡 注意: 另一个选择是通过使用以下方法记录脚本中出现的警告 logging.warn().这将有助于代码的清理。


方法2:用filterwarnings()抑制特定的警告信息

这个例子显示了如何根据选定的类别来抑制特定的警告信息。

import warnings

warnings.filterwarnings(action='default', category=UnicodeWarning) 

[`filterwarnings()`](https://docs.python.org/3/library/warnings.html)函数允许选择传递一个额外的参数,即category (category=UnicodeWarning)。任何时候在Python脚本中遇到的警告都会被忽略。

可用的类别有。

WarningPendingDeprecationWarning
UserWarningImportWarning
DeprecationWarningUnicodeWarning
SyntaxWarningBytesWarning
RuntimeWarningResourceWarning
FutureWarning

💡 注意:我们建议阅读各种类型的警告。


方法3:用catch_warnings()抑制警告信息

这个例子使用 catch_warnings()函数来涵盖这样的情况:编码者意识到脚本的问题,但不一定想看到警告信息。

import warnings

def suppress_warnings():
    warnings.warn('Plugin Deprecated!', DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter('ignore')
    suppress_warnings()

这段代码可以抑制任何将在未来版本中从Python中删除的废弃模块的警告信息。

这允许编码者在保持代码的可操作性的同时解决即将过时的模块的替换问题。


方法 4:用 shutup() 抑制警告信息

这个例子使用 shutup()来抑制任何和所有的警告!

为了使这段代码无错误地运行,需要安装 shutup()插件需要被安装。

导航到一个IDE,从终端运行以下代码。

pip install shutup!

接下来,将下面这行代码放在任何Python脚本的顶部。

这就是了!

import shutup; shutup.please()

方法 5:用 -W 抑制警告

这个例子展示了如何在终端使用-W 开关来抑制脚本警告。在终端的命令提示符下,输入python -W ignore yourfilename.py 。按<Enter> 键来执行。

$ python -W ignore hello.py

脚本将在不显示任何警告信息的情况下运行。


总结

这(5)种抑制警告信息的方法应该给你足够的信息来选择最适合你编码要求的方法。

祝您好运,编码愉快!