天天看点

Python:warnings模块产生警告和忽略警告

产生警告

方法

warnings.warn(message, category=None, stacklevel=1, source=None)      

category可选参数

Warning                   | 这是所有警告类的基类。它是异常的子类。
UserWarning               | warn()的默认类别。
DeprecationWarning        | 关于不推荐使用的功能的警告的基类别(默认情况下忽略)。
SyntaxWarning             | 关于可疑语法特征的警告的基类。
RuntimeWarning            | 关于可疑运行时功能的警告的基类别。
FutureWarning             | Base类别,用于关于将来会在语义上发生变化的构造的警告。
PendingDeprecationWarning | 关于将来不推荐使用的功能的警告的基本类别(默认情况下忽略)。
ImportWarning             | 导入模块过程中触发的警告的基本类别(默认情况下忽略)。
UnicodeWarning            | 与Unicode相关的警告的基类别。
BytesWarning              | 与字节和bytearray相关的警告的基类别。
ResourceWarning           | 与资源使用相关的警告的基类别。      

示例

# -*- coding: utf-8 -*-

import warnings


def foo():
    warnings.warn("Deprecated", DeprecationWarning)


if __name__ == '__main__':
    foo()      

过滤警告

warnings.filterwarnings(action,message ='',category = Warning, module='',lineno = 0,append = False)

warnings.simplefilter(action, category = Warning,lineno = 0,append = False)      

action是以下字符串之一:

error   | 将匹配警告转换为异常
ignore  | 不会打印匹配的警告
always  | 总是打印匹配的警告
default | 打印发出警告的每个位置的首次出现的匹配警告
module  | 将为发出警告的每个模块打印首次发生的匹配警告
once    | 仅打印第一次匹配的警告,不管位置如何      
# 方式一
import warnings
warnings.filterwarnings("ignore")
foo()


# 方式二
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    foo()


# 方式三:命令行方式
$ python -W ignore foo.py
      

参考

python模块学习之warnings Python忽略warning警告错误