You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python触发警告时让调试器中断?

在Python中调试警告时让调试器中断的方法

不想把警告强制转为错误,但又要在警告触发时暂停程序查看变量?试试这两种实用方法:

方法一:局部代码块内触发调试中断

如果只需要调试某段代码里的警告,可以用warnings.catch_warnings临时替换警告处理逻辑,触发警告时自动进入pdb调试器:

import warnings
import pdb

def debug_warn_handler(message, category, filename, lineno, file=None, line=None):
    # 先正常打印警告信息
    warnings._showwarnmsg_impl(message, category, filename, lineno, file, line)
    # 触发调试器中断
    pdb.set_trace()

# 在with块内的代码会使用自定义警告处理
with warnings.catch_warnings():
    warnings.showwarning = debug_warn_handler
    # 这里放你要调试的代码段
    run_your_code_that_triggers_warnings()

进入调试后,你可以用p 变量名查看变量值,输入c继续执行程序,或者用n单步运行,完全灵活控制。

方法二:全局生效,按需过滤特定警告

如果想全局监控警告,但只针对特定类型的警告中断,可以替换全局的警告处理函数,加上条件判断:

import warnings
import pdb

# 保存原始的警告处理函数
original_warn_handler = warnings.showwarning

def selective_debug_warn(message, category, filename, lineno, file=None, line=None):
    original_warn_handler(message, category, filename, lineno, file, line)
    # 只针对DeprecationWarning类型的警告触发调试(可根据需求修改)
    if issubclass(category, DeprecationWarning):
        pdb.set_trace()

# 设置全局警告处理
warnings.showwarning = selective_debug_warn

# 后续所有代码触发符合条件的警告时都会中断
your_full_program_code()

这种方式可以精准控制哪些警告需要调试,不需要的警告会正常打印但不会中断程序,完全满足你“随时恢复执行或忽略部分警告”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:24:55