在自定义异常处理期间,您能否将 Python 调试器带回原始异常?

问题描述

我的代码引发了一个自定义异常,它将我的调试器放在了错误的位置。例如,在下面的代码中,我想从调试器打印我的 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 中的 ud 调整您所在的堆栈帧。在您的玩具示例中,一旦 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 控件也会从模块的第一条语句开始。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...