我通过对字符串进行一些预处理来创建DSL,然后使用exec使用python解释器调用预处理的代码。我希望能够使用pdb逐步执行预处理代码,并能够显示我正在逐步执行的python代码的实际行(在预处理之后)。
例如:
In [1]: s = '''print "hello"
...: print 'world'
...: '''
In [2]: s
Out[2]: 'print "hello"\nprint \'world\'\n'
In [3]: import pdb
In [4]: pdb.run(s)
> <string>(1)<module>()
(Pdb) list
[EOF]
我希望pdb中的list
命令输出代码并显示我所在的行,就像我在常规python文件中的断点处停止时一样。任何关于如何做到这一点的提示,或者另一种方法/心态都将不胜感激!
[编辑]
我使用exec的可选全局位置参数将一堆复杂的对象传递给exec,因此将字符串写入文件然后在pdb中运行该文件将无法正常工作。例如:
s = '''some_complicated_stateful_object.method(foo)'''
exec(s, {'some_complicated_stateful_object': an_object,
'foo': some_other_object})
感谢您的好建议!