模块'对象没有属性'choice' - 尝试使用random.choice

31 投票
6 回答
66640 浏览
提问于 2025-04-20 02:47

有人能告诉我我可能哪里做错了吗?我在运行我的Python代码时,总是收到这个消息:

import random

foo = ['a', 'b', 'c', 'd', 'e']

random_item = random.choice(foo)

print random_item

错误

AttributeError: 'module'对象没有'choice'这个属性

6 个回答

3

简单来说,Python在找第一个名为“random”的文件,但没有找到“choice”这个属性。

99.99%的情况下,这意味着你的文件夹里已经有一个叫“random”的文件。如果是这样的话,改个名字再试试。应该就能正常工作了。

4

我也遇到过这个错误,是因为我把一个方法命名为 random,像这样:

import random

def random():

  foo = ['a', 'b', 'c', 'd', 'e']

  random_item = random.choice(foo)

  print random_item

random()

这不是你的情况(命名一个文件为 random.py),但对于其他搜索这个错误的人来说,他们可能会犯这个错误。

7

听起来像是导入的问题。你在同一个文件夹里有没有叫做 random 的其他模块?如果有的话(而且你用的是python2,这从 print random_item 可以看出来),那么它就会导入那个模块。尽量不要用内置名称来命名你的文件。

你可以用下面的代码来测试一下:

import random

print random.__file__

实际的 random.py 模块在标准库里,路径是 path/to/python/lib/random.py。如果你的模块在别的地方,这段代码会告诉你它在哪里。

18

在我的情况下,问题出在我使用了 random.choices(),而我用的是 python 3.5。这个功能其实是从 python 3.6 开始才有的。

如果你在用 python 3.5 或 2.7,可以改用 random.sample(),但不要使用 weightscum_weights 这些参数,因为它们是 random.choices() 中才有的。你可以在这里查看相关文档:这里

89

随便猜猜:你可能把你的脚本命名为 random.py。不要把你的脚本命名为和模块一样的名字。

我这么说是因为 random 模块确实有一个 choice 方法,所以在导入的时候可能会导入到错误的(也就是不想要的)模块。

撰写回答