我刚收到错误:
Traceback (most recent call last):
File "./download_documents.py", line 153, in <module>
paragraphs, used_pages = find_pages(lang, to_extract)
File "./download_documents.py", line 67, in find_pages
random.shuffle(page_titles_queue)
File "/usr/lib/python2.7/random.py", line 291, in shuffle
x[i], x[j] = x[j], x[i]
KeyError: 1
让我感到困惑。
random.shuffle
似乎适用于零元素列表和单元素列表。page_titles_queue
是元组列表。random.shuffle(page_titles_queue)
之后的两行,有page_titles_queue.pop()
,但这不应影响随机播放。正确?那么KeyError的可能原因是什么?
我在Ubuntu 16.04上使用Python 2.7.12
。
答案 0 :(得分:3)
random.shuffle
只是交换项目,发生异常的行使这一点非常清楚:
x[i], x[j] = x[j], x[i]
其中x
是传入的“序列”。在这种情况下,i
和j
将是range(0, len(x))
范围内的值,如果其中任何一个{ “序列”中不存在{1}}或i
,它会抛出j
。在你的情况下,它很可能会抛出Exception
:
KeyError
然而,如果字典包含构成>>> import random
>>> d = {i: i for i in range(7, 10)}
>>> random.shuffle(d)
KeyError: 3
的密钥,则可以通过交换值来实现:
range(0, len(x))
如果缺少一个或多个密钥,它可以工作,也可以抛出>>> d = {i: i for i in range(10)}
>>> random.shuffle(d)
>>> d
{0: 7, 1: 9, 2: 3, 3: 4, 4: 0, 5: 2, 6: 1, 7: 6, 8: 8, 9: 5}
。这取决于将绘制哪些随机数:
Exception