You need to enable JavaScript to run this app. 如何检查Python中Warnings Filter的当前状态?
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Python中Warnings Filter的当前状态?

Python查看警告过滤器当前状态的方法

Python的warnings模块会将所有生效的过滤规则存储在内置的公开列表属性中,直接读取即可获取完整配置:

1. 直接读取warnings.filters列表

这是最直接的方法,所有通过warnings.simplefilter添加、PYTHONWARNINGS环境变量配置、-W命令行参数传入的规则,最终都会合并到这个有序列表中,过滤时会按列表顺序从前到后匹配。
列表中每一项是固定结构的元组:(action, message, category, module, lineno),各字段含义如下:

  • action:警告触发后的处理动作,常见取值包括error(转为异常抛出)、ignore(直接忽略)、always(每次触发都打印)、default(同一位置首次触发打印)、module(同一模块首次触发打印)、once(全程序仅打印一次)
  • message:匹配警告内容的正则表达式对象,空代表匹配所有内容
  • category:匹配的警告类,比如DeprecationWarning、UserWarning等
  • module:匹配触发警告的模块名的正则表达式对象,空代表匹配所有模块
  • lineno:匹配触发警告的代码行号,0代表匹配所有行

示例代码:

import warnings
from pprint import pprint

# 打印当前所有生效的警告过滤规则
pprint(warnings.filters)

2. 输出可读性更强的规则说明

如果需要更直观的说明,可以自己封装简单的解析函数,示例如下:

import warnings

def print_warnings_filters():
    action_desc = {
        "error": "转为异常抛出",
        "ignore": "直接忽略",
        "always": "每次触发都打印",
        "default": "同一位置首次触发打印",
        "module": "同一模块首次触发打印",
        "once": "全程序仅打印一次"
    }
    for i, rule in enumerate(warnings.filters, 1):
        action, msg_re, cat, mod_re, lineno = rule
        print(f"=== 第{i}条规则 ===")
        print(f"处理动作:{action_desc.get(action, action)}")
        print(f"匹配警告类型:{cat.__name__}")
        print(f"匹配警告内容正则:{msg_re.pattern if msg_re else '无(匹配所有)'}")
        print(f"匹配模块正则:{mod_re.pattern if mod_re else '无(匹配所有)'}")
        print(f"匹配行号:{'所有行' if lineno == 0 else lineno}")
        print()

print_warnings_filters()

内容的提问来源于stack exchange,提问作者Jasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 12:06:08