Yesterday I made a simulation using Python. I had a few difficulties with variables and debugging.
Is there any software for Python, which provides a decent debugger?
解决方案
Don't forget about post-mortem debugging! After an exception is thrown, the stack frame with all of the locals is contained within sys.last_traceback. You can do pdb.pm() to go to the stack frame where the exception was thrown then p(retty)p(rint) the locals().
Here is a function that uses this information to extract the local variables from the stack.
def findlocals(search, startframe=None, trace=False):
from pprint import pprint
import inspect, pdb
startframe = startframe or sys.last_traceback
frames = inspect.getinnerframes(startframe)
frame = [tb for (tb, _, lineno, fname, _, _) in frames
if search in (lineno, fname)][0]
if trace:
pprint(frame.f_locals)
pdb.set_trace(frame)
return frame.f_locals
Usage:
>>> def screwyFunc():
a = 0
return 2/a
>>> screwyFunc()
Traceback (most recent call last):
File "", line 1, in
screwyFunc()
File "", line 3, in screwyFunc
return 2/a
ZeroDivisionError: integer division or modulo by zero
>>> findlocals('screwyFunc')
{'a': 0}
本文介绍了一种在Python中进行调试的方法,特别是针对变量和错误处理。通过利用pdb模块的post-mortem调试功能,可以在异常发生后查看并分析堆栈帧中的局部变量。作者提供了一个名为`find_locals`的函数,该函数能够从堆栈中提取出异常发生时的局部变量,这对于理解和修复代码中的问题非常有帮助。
1102

被折叠的 条评论
为什么被折叠?



