【问题标题】:Can I raise an exception from pdb? (for debugging)我可以从 pdb 中引发异常吗? (用于调试)
【发布时间】:2015-12-30 01:31:12
【问题描述】:

假设我有:

def fn1():
    # do some work
    # in some cases raise exception

def fn2():
    # do some work
    try:
        fn1()
    except:
        # do some work

我想通过在 pdb 中引发异常来测试负面路径。 我从fn1试过:

(Pdb) raise cliexceptions.NoConnectionError("Could not connect")
*** NoConnectionError: 'Could not connect to SSR'

它打印消息但不退出fn1。 有没有办法做到这一点?

【问题讨论】:

  • 我想不,你不能。那个要求太巴扎了。我认为您可以将代码打包到 except 块中并将其作为函数进行测试。
  • 是的,但是从 pdb 进行测试而不是将每个代码包装在 except 块中并作为函数进行测试不是更容易吗?
  • 现在你在问一个问题。那怎么会更容易呢?为什么调试器会影响程序的工作流程呢?这纯粹不是调试器的设计目标,因此不受支持是很自然的。

标签: python debugging exception try-catch pdb


【解决方案1】:

您可以手动(部分)模拟异常的影响,方法是跳转到except 子句中的相应行,并且如果您还捕获了异常对象(在您的情况下您没有),显式创建它。

# a.py
line1@ def fn2():
line2@    # do some work
line3@    try:
line4@        fn1()
line5@    except:
line6@        print 'exception'

(Pdb) b 4
(Pdb) c
> a.py(4)fn2()
-> fn1()
(Pdb) j 6
> a.py(6)fn2()
-> print 'exception'
(Pdb) e = ValueError(5)
(Pdb) <<the rest of your debugging here>>

【讨论】:

  • 谢谢..这很有用
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
相关资源
最近更新 更多