2011-03-19 75 views
1

我试图问题上的Django壳PDB

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

使用关键字参数当地人=当地人(),而不是位置论据。有了pdb,它有时会咬人。 – simplyharsh 2011-03-19 07:12:47

回答

4

pdb.run( '打印ao.as_table()',当地人())

基本上传递当地人()词典

3

两件事

  • 首先,使用语句参数作为调用。即"ao.as_table()"()作为后缀。
  • 其次,将关键字参数locals=locals()传递给函数。你也可以通过globals=globals()。不要使用locals()作为位置参数,因为它将被分配给全局变量,因为run(statement[, globals[, locals]])将全局变量作为第一个参数。因此,如果第一个位置参数是locals(),那么在运行代码时将被误认为globals

它应该是

pdb.run( '打印ao.as_table()' 当地人=当地人())