pdb的问题

发布于 2024-10-24 05:58:48 字数 842 浏览 8 评论 0原文

在 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

出了什么问题? :(

on a django shell i tried

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

but on the last statement , after hitting continue for the first time i am getting a stacktrace as

/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

what went wrong ? :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

锦欢 2024-10-31 05:58:48

<块引用>
<块引用>

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


基本上传递了 locals() 字典

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

Basically pass on the locals() dictionary

痴骨ら 2024-10-31 05:58:48

有两件事。

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

应该是

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

Two things.

  • First, use the statement argument as a call. i.e "ao.as_table()" with () as suffix.
  • Second, pass a keyword argument locals=locals() to the function. You can also pass globals=globals(). Don't use locals() as positional argument, as it will get assigned to globals as run(statement[, globals[, locals]]) takes globals as first argument. So if the first positional argument is locals() it will be mistaken as globals while running your code.

It should be

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文