При создании списка путем вызова списка функцию на итератора, который сам по себе был произведен с 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)
Ну, оказывается, что поведение «в скрипте» было на самом деле, когда я пытался отлаживать его в pdb. Спасибо! –