Python pdb лямбда-функция глобальная ошибка имени

Я тестировал исправление с помощью 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)]'

Ответ 1

Я могу подтвердить эту проблему с помощью Python 2.7. Существует отчет об ошибке для Python 3, в котором предлагается обходной путь: interact в приглашении pdb выводит вас в интерактивный сеанс, который заполняется globals() и locals(), а ваш lambda должен работать как ожидалось.

Ответ 2

pdb не является полной оболочкой python и перехватывает много вещей. Но добавление print перед ним должно работать:

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