【问题标题】:Any way of achieving the same thing as python -mpdb from inside the script?从脚本内部实现与 python -mpdb 相同的任何方法?
【发布时间】:2025-12-01 17:40:01
【问题描述】:

除了将所有代码包装在tryexcept 中之外,还有什么方法可以实现与运行python -mpdb script 之类的脚本相同的功能吗?我希望能够在引发异常时查看出现了什么问题。

【问题讨论】:

    标签: python debugging pdb


    【解决方案1】:

    如果您不想修改源代码,您可以从 ipython 运行它 - 一个增强的交互式 python shell。

    例如运行 ipython 然后执行 %pdb on 以启用事后调试。然后%run scriptname 将运行脚本并在任何未捕获的异常上自动进入调试器。

    或者%run -d scriptname 将在调试器中启动脚本。

    【讨论】:

      【解决方案2】:
      python -i script
      

      当引发异常时,您将留在交互式 shell 中;那么

      import pdb
      pdb.pm()
      

      会将您放入事后调试器中,以便您可以进行所有常规调试。

      只要您的脚本不调用 sys.exit,这应该可以工作。 (哪些脚本不应该这样做,因为它破坏了这种非常有用的技术!并且使它们更难编写测试。)

      【讨论】:

        【解决方案3】:

        import pdb; pdb.set_trace()

        来源:http://docs.python.org/library/pdb.html

        【讨论】:

        • 是的,但这将停在pdb.set_trace 的行。我希望它在引发异常时自动停止。
        • 您可以尝试使用 pdb.post_mortem(也在该文档中)。将异常的回溯传递给它。当然,你必须在某个地方抓住它才能做到这一点。
        最近更新 更多