当我通过在使用 itertools.combinations 函数生成的迭代器上调用 list 函数创建列表时,有时会出现如下错误:
*** Error in argument: '(combinations(aDict,2))'
但是如果我在 print , len 或 isinstance 函数中调用相同的列表,它将按预期工作。
我最初在脚本中遇到了这种行为,但我最可靠地使用pdb重现它,因此代码示例涉及在sript上调用 set_trace 然后在解释器上键入:
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 ,为什么不会发生?
(我在64位Intel机器上通过Windows 7运行python 3.3.1)
答案 0 :(得分: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))