pdb的问题

时间:2011-03-19 06:37:13

标签: django pdb

在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
出了什么问题? :(

2 个答案:

答案 0 :(得分:4)

  
    
      

pdb.run('print ao.as_table()',locals())

    
  

基本上传递locals()词典

答案 1 :(得分:3)

两件事。

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

应该是

  

pdb.run('print ao.as_table()'locals = locals())