繁体   English   中英

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

[英]'module' object has no attribute 'choice' - trying to use random.choice

有人可以告诉我我可能做错了什么。 运行 python 代码时,我不断收到此消息:

import random

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

random_item = random.choice(foo)

print random_item

错误

AttributeError:“模块”对象没有属性“选择”

在黑暗中拍摄:您可能将脚本命名为random.py 不要将脚本命名为与模块相同的名称。

我这样说是因为random模块确实有一个choice方法,所以导入可能会抓错(读取:不需要的)模块。

对我来说问题是我用的

random.choices 

在python 3.6本地开发但服务器是python3.5没有这个方法...

听起来像是一个导入问题。 在同一目录中是否有另一个名为random模块? 如果是这样(如果您使用的是python2,这在print random_item是显而易见的)那么它将导入它。 尽量不要隐藏内置名称。

您可以使用以下代码对此进行测试:

import random

print random.__file__

stdlib中的实际random.py模块位于path/to/python/lib/random.py 如果你的是其他地方,这将告诉你它在哪里。

简而言之,Python查找它发现的名为“random”的第一个文件,并且没有找到choice属性。

99.99%的时间,这意味着你已经在路径/目录中有一个已经命名为“随机”的文件。 如果这是真的,重命名并重试。 它应该工作。

通过像这样random命名方法我也得到了这个错误:

import random

def random():

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

  random_item = random.choice(foo)

  print random_item

random()

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

如果您使用的 Python 版本低于 3.6,则必须使用 NumPy 库来实现加权随机数。 借助choice()方法,我们可以获得一维数组的随机样本,并返回numpy数组的随机样本。


from numpy.random import choice
  
sampleList = [100, 200, 300, 400, 500]
randomNumberList = choice(
  sampleList, 5, p=[0.05, 0.1, 0.15, 0.20, 0.5])
  
print(randomNumberList)

来源: geeksforgeek

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM