2014-09-05 58 views
9

有人可以告诉我我可能做错了什么。“模块”对象没有属性“选择” - 尝试使用random.choice

import random 

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

random_item = random.choice(foo) 

print random_item 

错误

AttributeError: 'module' object has no attribute 'choice'

+0

你到底想干什么? – mlwn 2014-09-05 23:49:43

+2

@mlwn他们想从他们的列表'foo'中选择一个随机项目,这不明显吗? – CoryKramer 2014-09-05 23:50:16

+0

该代码完美适用于我...您正在使用哪个版本的Python?哪个操作系统? – mlwn 2014-09-05 23:52:18

回答

6

听起来像一个进口的问题:当我运行我的Python代码我不断收到此消息。是否在random的同一目录中有另一个模块?如果是这样的话(如果你使用的是python2,这是从print random_item明显可见的),那么它就会导入它。尽量不要隐藏内置的名称。

您可以用下面的代码测试:

import random 

print random.__file__ 

实际random.py从STDLIB模块住在path/to/python/lib/random.py。如果你的是其他地方,这会告诉你它在哪里。

+0

通常不是'path/to/python/lib/pythonX.Y/random.py'(除非他使用的是真正老的Python,我认为在2.3之前) ?另外,我不认为2.7会给你.py文件,即使按照3.3+的方式存在.pyc,所以可能是'random.pyc',但我可能会误解这一点。但除了那个小小的挑剔之外,很好的答案。 – abarnert 2014-09-05 23:55:55

+0

我保存我的文件在我的桌面上。 – AMHD 2014-09-06 00:10:26

+0

@abarnert我在我的Python3.3上测试过并且得到了''C:\ Python33 \ lib \ random.py“' – 2014-09-06 00:50:57

27

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

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

+0

如果这不能解决它,请检查一个random.pyc文件。 – zimbu668 2016-05-12 19:49:55

1

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

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

1

我也被命名的方法random这样得到这个错误:

import random 

def random(): 

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

    random_item = random.choice(foo) 

    print random_item 

random() 

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

相关问题