Python ';模块';对象没有属性';选择';-尝试使用随机选择

Python ';模块';对象没有属性';选择';-尝试使用随机选择,python,attributeerror,Python,Attributeerror,有人能告诉我我可能做错了什么吗。在运行python代码时,我不断收到以下消息: import random foo = ['a', 'b', 'c', 'd', 'e'] random_item = random.choice(foo) print random_item 错误 AttributeError:“模块”对象没有属性“选项” 听起来像是个重要问题。同一目录中是否有另一个名为random的模块?如果是这样的话(如果您使用的是python2,这在打印随机项目中很明显),那么它会将

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

import random

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

random_item = random.choice(foo)

print random_item
错误

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


听起来像是个重要问题。同一目录中是否有另一个名为
random
的模块?如果是这样的话(如果您使用的是python2,这在
打印随机项目
中很明显),那么它会将其导入。尽量不要隐藏内置名称

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

import random

print random.__file__

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

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


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

简言之,Python正在查找它找到的第一个名为“random”的文件,而没有找到choice属性


99.99%的情况下,这意味着您在路径/目录中有一个名为“random”的文件。如果这是真的,请重命名它并重试。它应该可以工作。

我还通过以下方式命名了一个方法
random
,得到了这个错误:

import random

def random():

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

  random_item = random.choice(foo)

  print random_item

random()

这不是您的情况(命名一个文件
random.py
),而是其他搜索此错误并可能犯此错误的人的情况。

对我来说,问题是我使用了

random.choices 
在Python3.6本地开发中 但是
服务器是python3.5,没有这个方法…

你到底想做什么?请@mlwn他们想从他们的列表
foo
中随机选择一个项目,这不明显吗?代码对我来说非常合适。。。您正在使用哪个版本的python?哪种操作系统?很明显,它对您有效,但可能的问题在答案中解释了两次;)@AMHD:这并不能解释mlwn提出的两个问题中的任何一个,因为PyCharm可以在多种Python版本上工作,至少在3种不同的操作系统上。它通常不是
path/to/Python/lib/pythonX.Y/random.py
(除非他使用的是一种非常古老的Python,我认为是在2.3之前的版本)?此外,我认为2.7不会像3.3+那样提供.pyc文件,所以可能是
random.pyc
,但我可能记错了。但除了那个小小的吹毛求疵,答案很好。我把文件保存在我的桌面上。@AdamSmith:哦,是的,在Windows上,它关闭了
pythonX.Y
目录,因为顶级目录已经是
PythonXY
。它给了我
SyntaxError:print调用中缺少括号。
@Marine1关于这个问题的操作正在运行Python2,其中,
python
是一个语句而不是函数,不需要括号。如果这不能解决它,请检查random.pyc文件。它可能是一个暗中拍摄,但仍然是一个令人印象深刻的暗中拍摄+1(另外,作为记录,名称为
math.py
会导致相同的问题)使用“random.sample”
random.sample
在我的生产服务器使用python3.5时对我有效。不需要更改代码。只要加上它。当然,请在执行此操作之前测试您的代码。