有人可以告诉我我可能做错了什么。 当我运行python代码时,我一直收到此消息:
1
2
3
4
5
6
7import random
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
错误
AttributeError: 'module' object has no attribute 'choice'
你到底想做什么?
@mlwn他们想从列表foo中选择一个随机项,这不是很明显吗?
该代码非常适合我...您正在使用哪个版本的python? 和哪个操作系统?
很明显,它对您有用,但是可能的问题在答案中被解释了两次;)
我正在运行最新版本的pyCharm社区版
@AMHD:这不能解释mlwn提出的两个问题,因为PyCharm可以在至少3个不同的OS上使用多种Python版本。
另一种可能性是您可能具有较旧的numpy版本。 升级方式:sudo pip install numpy --upgrade
在黑暗中拍摄:您可能将脚本命名为random.py。不要为脚本命名与模块相同的名称。
我之所以这样说是因为random模块确实具有choice方法,因此导入可能捕获了错误的(读:不需要的)模块。
如果仍不能解决问题,请同时检查random.pyc文件。
它可能是在黑暗中拍摄,但仍然是黑暗中令人印象深刻的拍摄。 +1(也为记录起见,名称为math.py会导致相同的问题)
非常感谢,它为我工作。
对我来说,问题是我用
1random.choices
在python 3.6本地dev中
但
服务器是python3.5没有此方法...
使用" random.sample"
当我的生产服务器使用python3.5时,random.sample为我工作。无需更改代码。只需添加即可。当然,在执行此操作之前,请先测试您的代码。
听起来像是导入问题。同一目录中是否存在另一个名为random的模块?如果是这样(并且您使用的是python2,这在print random_item中很明显),那么它将导入它。尽量不要掩盖内置名称。
您可以使用以下代码对此进行测试:
1
2
3import random
print random.__file__
stdlib中的实际random.py模块位于path/to/python/lib/random.py中。如果您的在其他地方,这会告诉您它在哪里。
通常不是pathtopythonlibpythonX.Yrandom.py吗(除非他使用的是非常老的Python,否则我认为应该在2.3之前)?另外,我不认为2.7会为您提供.py文件,即使3.3。+的方式存在.pyc,也可能是random.pyc,但我可能记错了。但是除了那点挑剔的小问题之外,这是一个很好的答案。
我将文件保存在桌面上。
@abarnert我在Python3.3上进行了测试,并得到了"C:\Python33\lib
andom.py"
@AdamSmith:哦,是的,在Windows上它离开了pythonX.Y目录,因为顶级目录已经是PythonXY。
它给了我SyntaxError: Missing parentheses in call to print
@ Marine1此问题上的OP正在运行Python2,其中python是不是函数的语句,不需要括号。
我也通过这样命名方法random来得到此错误:
1
2
3
4
5
6
7
8
9
10
11import random
def random():
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
random()
这不是您的情况(为文件random.py命名),但对于其他人来说,搜索此错误并可能会犯此错误。
简而言之,Python在第一个文件中查找名为"随机"的文件,而没有找到choice属性。
99.99%的时间,这意味着您在路径/目录中已经有一个文件名为" random"。如果是这样,请重命名并重试。它应该工作。