问题描述
我的代码引发了一个自定义异常,它将我的调试器放在了错误的位置。例如,在下面的代码中,我想从调试器打印我的 important_local_variable
的值,但是它似乎无法访问,因为调试器在 CustomException
内启动:
test.py
class CustomException(Exception):
pass
def my_func():
important_local_variable = 0
badness = 1/important_local_variable
try:
my_func()
except:
raise CustomException
python3 -m ipdb test.py
bash-3.2$ python3 -m pdb test.py
> /Users/max/test.py(1)<module>()
-> class CustomException(Exception):
(Pdb)
解决方法
您可能只需要使用 pdb 中的 u
和 d
调整您所在的堆栈帧。在您的玩具示例中,一旦 ZeroDivisionError
命中,您就可以进入函数并提取局部变量就好了:
C:\Users\Randy\test>python -m pdb test.py
> c:\users\randy\test\test.py(1)<module>()
-> class CustomException(Exception):
(Pdb) n
> c:\users\randy\test\test.py(4)<module>()
-> def my_func():
(Pdb) n
> c:\users\randy\test\test.py(8)<module>()
-> try:
(Pdb) n
> c:\users\randy\test\test.py(9)<module>()
-> my_func()
(Pdb) n
ZeroDivisionError: division by zero
> c:\users\randy\test\test.py(9)<module>()
-> my_func()
(Pdb) d
> c:\users\randy\test\test.py(6)my_func()
-> badness = 1/important_local_variable
(Pdb) important_local_variable
0
如果是初始
> c:\users\randy\test\test.py(1)<module>()
-> class CustomException(Exception):
这与您有关,这只是从一开始就运行代码的解释器,而不是触发的异常。这是因为我们从程序的开头启动了 pdb。您只需要使用 n
单步执行代码,直到实际开始抛出错误,就像我在上面的示例中所做的那样。
是的,它正在尝试定义异常类。您应该让调试器继续运行。
根据注释,它是脚本的第一行。
即使你有一个 main 函数,python 控件也会从模块的第一条语句开始。