假设我有一个非常基本的程序,肯定会引发异常.我已经添加了一个pdb.set_trace(),并且希望能够在发生错误时环顾四周.
import pdb
from random import randint
def two_possible_errors(input):
try:
assert input % 2, "error!"
assert not input % 2, "error!"
except Exception, e:
pdb.set_trace()
raise
two_possible_errors(randint(0,9))
我的问题是,当我捕获到异常时,我已经在except子句中了,我真的不知道错误实际上在哪里发生.通常,我会环顾四周,但是如果我想查看堆栈跟踪,则需要恢复执行并等待程序崩溃.有没有更好的办法?
好的,让我们从例外开始.在这种特殊情况下,我可以在断言中留言,但这不重要.
> /Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(16)two_possible_errors()
-> raise
(Pdb) e
AssertionError('error!',)
在这一点上,我不知道这两行中的哪一行出错了.
让我们在哪里尝试.它返回当前位置,而不是发生异常的位置.
(Pdb) where
/Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(20)()
-> test()
/Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(18)test()
-> two_possible_errors(randint(0,9))
> /Users/jluc/kds2/wk/explore/explore_pdb_exceptions.py(16)two_possible_errors()
-> raise
让我们打印第16行,只是为了确保:
(Pdb) l 16
11 try:
12 assert input % 2, "error!"
13 assert not input % 2, "error!"
14 except Exception, e:
15 pdb.set_trace()
16 -> raise
17
18 two_possible_errors(randint(0,9))
19
20 test()
为了真正知道我在哪里,我可以让pdb(c)继续并检查退出stacktrace.但是现在我完全没有使用pdb了.有没有一种简单的方法可以从异常本身获取信息?在继续之前?
(Pdb) c
Traceback (most recent call last):
File "explore_pdb_exceptions.py", line 20, in
test()
File "explore_pdb_exceptions.py", line 18, in test
two_possible_errors(randint(0,9))
File "explore_pdb_exceptions.py", line 13, in two_possible_errors
assert not input % 2, "error!"
AssertionError: error!