random.shuffle如何导致KeyError?

时间:2017-08-23 05:44:30

标签: python python-2.7 random shuffle keyerror

我刚收到错误:

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

让我感到困惑。

  1. random.shuffle似乎适用于零元素列表和单元素列表。
  2. page_titles_queue是元组列表。
  3. random.shuffle(page_titles_queue)之后的两行,有page_titles_queue.pop(),但这不应影响随机播放。正确?
  4. 那么KeyError的可能原因是什么?

    我在Ubuntu 16.04上使用Python 2.7.12

1 个答案:

答案 0 :(得分:3)

random.shuffle只是交换项目,发生异常的行使这一点非常清楚:

x[i], x[j] = x[j], x[i]

其中x是传入的“序列”。在这种情况下,ij将是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