在django shell上我试过
from django import forms
class A(forms.Form):
x = forms.CharField()
ao = A()
import pdb
pdb.run('ao.as_table')
但是在最后一个声明中,在第一次点击继续之后我得到了一个堆栈跟踪
/usr/lib/python2.6/pdb.pyc in run(statement, globals, locals)
1218
1219 def run(statement, globals=None, locals=None):
-> 1220 Pdb().run(statement, globals, locals)
1221
1222 def runeval(expression, globals=None, locals=None):
/usr/lib/python2.6/bdb.pyc in run(self, cmd, globals, locals)
370 cmd = cmd+'\n'
371 try:
--> 372 exec cmd in globals, locals
373 except BdbQuit:
374 pass
/usr/lib/pymodules/python2.6/IPython/FakeModule.pyc in <module>()
NameError: name 'ao' is not defined
出了什么问题? :(
答案 0 :(得分:4)
pdb.run('print ao.as_table()',locals())
基本上传递locals()词典
答案 1 :(得分:3)
两件事。
"ao.as_table()"
,后缀为()
。locals=locals()
传递给函数。您也可以传递globals=globals()
。不要使用locals()作为位置参数,因为它将被赋值给全局变量,因为run(statement[, globals[, locals]])
将全局变量作为第一个参数。因此,如果第一个位置参数为locals()
,则在运行代码时会将其误认为globals
。应该是
pdb.run('print ao.as_table()'locals = locals())