我正在使用pdb.set_trace()
测试一个修复程序,以确保它在实现之前按预期方式工作并且不断出现奇怪的错误。
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
所以我搬到了我的本地机器,以确保在寻求帮助之前尽可能简单地复制。在ipython中,我得到完全相同的行为。
In [1]: test = [1,2,3,4,4,3,2,1]
In [2]: max(range(len(test)),key=lambda i: test[i])
Out[2]: 3
In [3]: import pdb; pdb.set_trace()
--Call--
> /Users/tristanmatthews/anaconda/lib/python2.7/site-packages/IPython/core/displayhook.py(237)__call__()
-> def __call__(self, result=None):
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
但是在正常的命令行下它运行得很好:
tristan:~$ python
Python 2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test = [1,2,3,4,4,3,2,1]
>>> max(range(len(test)),key=lambda i: test[i])
3
>>> import pdb; pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
3
如果有人知道这里发生了什么,我真的很想知道。
对于记录,修复在我的代码中正常工作,而不是在调试器中。
作为参考,我的python版本是: 原始错误:
'2.7.3 (default, Apr 10 2013, 06:20:15) \n[GCC 4.6.3]'
本地计算机ipython和命令行都是相同的:
In [5]: sys.version
Out[5]: '2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09) \n[GCC 4.0.1 (Apple Inc. build 5493)]'
>>> sys.version
'2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09) \n[GCC 4.0.1 (Apple Inc. build 5493)]'
答案 0 :(得分:2)
我可以用Python 2.7确认这个问题。有一个bug report for Python 3表明workaround:interact
pdb
提示会让您进入一个交互式会话,其中填充了globals()
和< / em> locals()
,您的lambda
应按预期工作。
答案 1 :(得分:0)
pdb
不是一个完整的python shell,并拦截很多东西。但是在它前面添加print
应该有效:
print max(range(len(test)),key=lambda i: test[i])