2011-03-19 6 views
1

sur une coquille de django j'ai essayéavec pdb

from django import forms 
class A(forms.Form): 
    x = forms.CharField() 
ao = A() 
import pdb 
pdb.run('ao.as_table') 

mais la dernière déclaration, après avoir frappé continuer pour la première fois que je reçois un stacktrace comme

/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 

ce qui a mal tourné? :(

+0

Utilisez argument mot-clef locals = habitants(), au lieu de position argument. Avec pdb, il peut parfois mordre. – simplyharsh

Répondre

4

pdb.run ('ao.as_table d'impression()', la population locale())

passe essentiellement des habitants() dictionnaire

3

Deux choses

  • D'abord, utilisez l'argument instruction en tant qu'appel. c'est-à-dire "ao.as_table()" avec () comme suffixe.
  • Ensuite, passez un argument de mot clé locals=locals() à la fonction. Vous pouvez également passer le globals=globals(). N'utilisez pas locals() comme argument de position, car il sera assigné aux globals car run(statement[, globals[, locals]]) prend les globals comme premier argument. Donc, si le premier argument positionnel est locals(), il sera confondu avec globals lors de l'exécution de votre code.

Il devrait être

pdb.run ('print ao.as_table()' locaux = sections locales())