【问题标题】:pdb postmortem debug: jump to raise of exception after exiting in exception handlerpdb事后调试:在异常处理程序中退出后跳转到引发异常
【发布时间】:2020-01-05 20:16:59
【问题描述】:

我只是好奇是否存在让 ipdb 调试器跳回到引发异常源的命令。

考虑以下小程序。

import sys
import random

def somefun():
    someval = random.random()
    raise Exception()

def run():
    try:
        somefun()
    except Exception:
        sys.exit(10)

从命令行(使用 ipython-console)运行 run 函数时,它应该以 10 退出。 有没有办法启动事后调试器 (pdb.pm()) 并通过跳回获取 someval 的值?

【问题讨论】:

    标签: python-3.x exception ipdb


    【解决方案1】:
    except Exception:
        sys.exit(10)
    

    有没有办法……通过跳回来获得 someval 的值?

    没有。它不见了。您的错误处理程序吞下了异常 并做了一些python认为“正常”的事情, 虽然父进程会将非零退出状态解释为错误。

    在调试环境中引发致命的 Python 错误。 这是一种方法:

    except Exception:
        if debug:
            raise
        else:
            sys.exit(10)
    

    然后调用 $ python -m pdb some_script.py 会让你 检查回溯和值:

    (Pdb) bt
    

    (Pdb) p someval
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多