2013-05-07 2 views
3

При создании списка путем вызова списка функцию на итератора, который сам по себе был произведен с itertools.combinations функции, иногда я получаю сообщение об ошибке вроде следующего:Список комбинаций не непосредственно доступных

*** Error in argument: '(combinations(aDict,2))' 

Но если я называю тот же список в печати, Len или isinstance функция, она работает, как ожидалось.

Первоначально я получил такое поведение в сценарии, но я мог бы наиболее достоверно воспроизвести его с помощью отладчика, поэтому пример кода включает в себя вызов set_trace на sript, а затем набрав на переводчика:

from itertools import combinations 
aDict={'a':1,'b':2,'c':3} 

print(len(list(combinations(aDict,2)))) 
print(isinstance(list(combinations(aDict,2)),list)) 
print(list(combinations(aDict,2))) 

len(list(combinations(aDict,2))) 
isinstance(list(combinations(aDict,2)),list) 
list(combinations(aDict,2)) 

print('Hello') 
import pdb 
pdb.set_trace() 

Тогда введя следующие команды в интерпретаторе:

>>> ================================ RESTART ================================ 
>>> 
3 
True 
[('a', 'b'), ('a', 'c'), ('b', 'c')] 
Hello 
--Return-- 
> c:\sw_dev\00_draft_development\02_scade\a429test\test_value_generator\pdbcomb.py(15)<module>()->None 
-> pdb.set_trace() 
(Pdb) len(list(combinations(aDict,2))) 
3 
(Pdb) isinstance(list(combinations(aDict,2)),list) 
True 
(Pdb) list(combinations(aDict,2)) 
*** Error in argument: '(combinations(aDict,2))' 
(Pdb) len(list(combinations(aDict,2))) 
3 
(Pdb) 

так что мой вопрос, что вызывает ошибку, и почему это не произойдет, если я обернуть ту же команду в качестве аргумента Len?

(я бегу питон 3.3.1 над Windows 7 в 64-битной машине Intel)

ответ

3

list является PDB команда:

(Pdb) help list 
l(ist) [first [,last]] 
List source code for the current file. 
Without arguments, list 11 lines around the current line 
or continue the previous listing. 
With one argument, list 11 lines starting at that line. 
With two arguments, list the given range; 
if the second argument is less than the first, it is a count. 

Используйте восклицательный знак, чтобы оценить линию как Python выражение: (Pdb) !list(combinations('abc', 2))

+0

Ну, оказывается, что поведение «в скрипте» было на самом деле, когда я пытался отлаживать его в pdb. Спасибо! –

Смежные вопросы