Python 通过调用 warnings 模块中定义的 warn() 函数来发出警告。警告消息通常用于提示用户一些错误或者过时的用法,当这些情况发生时我们不希望抛出异常或者直接退出程序。警告消息通常写入 sys.stderr,对警告的处理方式可以灵活的更改,例如忽略或者转变为为异常。警告的处理可以根据警告类别,警告消息的文本和发出警告消息的源位置而变化。对相同源位置的特定警告的重复通常被抑制。
警告控制分为两个阶段:首先,警告被触发时,确定是否应该发出消息;接下来,如果要发出消息,则使用用户可设置的钩子来格式化和打印消息。
警告过滤器可以用来控制是否发出警告消息,警告过滤器是一些匹配规则和动作的序列。可以通过调用 filterwarnings() 将规则添加到过滤器,并通过调用 resetwarnings() 将其重置为默认状态。
警告消息的输出是通过调用 showwarning() 函数来完成的,其可以被覆盖;该函数的默认实现通过调用 formatwarning() 格式化消息,这也可以由自定义实现使用。
警告类别
內建警告类型:
类 | 描述 |
---|---|
Warning | 所有警告类别类的基类,它是 Exception 的子类 |
UserWarning | 函数 warn() 的默认类别 |
DeprecationWarning | 用于已弃用功能的警告(默认被忽略) |
SyntaxWarning | 用于可疑语法的警告 |
RuntimeWarning | 用于有关可疑运行时功能的警告 |
FutureWarning | 对于未来特性更改的警告 |
PendingDeprecationWarning | 对于未来会被弃用的功能的警告(默认将被忽略) |
ImportWarning | 导入模块过程中触发的警告(默认被忽略) |
UnicodeWarning | 与 Unicode 相关的警告 |
BytesWarning | 与 bytes 和 bytearray 相关的警告 (Python3) |
ResourceWarning | 与资源使用相关的警告(Python3) |