python Warning警告有哪些情况

在很多代码中我们经常能看到一些代码能得到我们想要的结果,但是还会出现一些警告提示,这种情况一般出现情况会有好几种,下面就来细数一下所有类型警告和处理类。

一、警告类

首先是基类Warning,是警告基类。我们在IDE中一般只会看到他的子类:

DeprecationWarning  # 有关已弃用功能的警告的基类
PendingDeprecationWarning  # 有关不推荐使用功能的警告的基类
RuntimeWarning  # 有关可疑的运行时行为的警告的基类
SyntaxWarning  # 关于可疑语法警告的基类
UserWarning  # 用户代码生成警告的基类
FutureWarning  # 有关已弃用功能的警告的基类
ImportWarning  # 关于模块导入时可能出错的警告的基类
UnicodeWarning  # 与Unicode相关的警告的基类
BytesWarning  # 与bytes和bytearray相关的警告的基类
ResourceWarning  # 与资源使用相关的警告的基类。被默认警告过滤器忽略。

二、实例代码处理方法

捕获警告,在退出上下文时恢复警告过滤器和 showwarning() 函数功能。如果 record 参数是 False (缺省值),则上下文管理器在入口处返回 None。如果 record 是 True,则返回一个列表,该列表元素为 showwarning() 函数所见的对象,列表中的每个元素都具有与 showwarning() 的参数具有相同名称的属性。

import warnings

warnings.simplefilter("always")

def fxn():
    warnings.warn("this is a warning", Warning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

with warnings.catch_warnings(Warning):
    warnings.warn("this is a warning2", Warning)

warnings.warn("this is a warning3", Warning)

def fxn2():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings(record=True) as w:
    # Cause all warnings to always be triggered.
    warnings.simplefilter("always")
    # Trigger a warning.
    fxn2()
    # Verify some things
    assert len(w) == 1
    assert issubclass(w[-1].category, DeprecationWarning)
    assert "deprecated" in str(w[-1].message)
© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容