python pdb lambda函数全局名称错误

Posted

技术标签:

【中文标题】python pdb lambda函数全局名称错误【英文标题】:python pdb lambda function global name error 【发布时间】:2014-03-23 18:42:11 【问题描述】:

我正在使用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)]'

【问题讨论】:

'NameError: global name is not defined' under pdb, for dictionary that does exist的可能重复 【参考方案1】:

我可以用 Python 2.7 确认这个问题。有一个bug report for Python 3 建议workaround:interactpdb 提示符处将您带入一个交互式会话,该会话填充有globals() locals() 和您的@987654327 @ 应该按预期工作。

【讨论】:

【参考方案2】:

pdb 不是一个完整的 python shell,它会拦截很多东西。但是在它前面添加print 应该可以:

print max(range(len(test)),key=lambda i: test[i])

【讨论】:

不,这在这种情况下不起作用,请参阅我的answer。

以上是关于python pdb lambda函数全局名称错误的主要内容,如果未能解决你的问题,请参考以下文章

匿名函数内置函数与模块

Python函数:全局变量和局部变量匿名函数lambda递归函数

在多个 AWS Lambda 中处理相同的函数名称

python函数基础

AWS Lambda 到 Firestore 错误:无法导入名称“cygrpc”

Tkinter Python程序中函数参数的名称错误