2011-01-05 126 views
2

python的新手,并试图做一个随机数生成器。但是,我无法导入随机模块。当我尝试使用随机模块中的任何东西时,我得到一个AttributeError。谢谢你的帮助。在Python中导入和使用模块

#!/usr/bin/python -tt 

import random 

def main(): 
    x = random.randint(1,1000) 
    print x 

if __name__ == '__main__': 
    main() 
+4

什么是确切的错误?这段代码很好。 – user225312 2011-01-05 07:25:15

+0

删除了[random-number-generator],因为这不是关于随机数生成器的问题。这只是关于导入模块。 – aaronasterling 2011-01-05 07:26:24

+0

以下是错误: 回溯(最近通话最后一个): 文件 “./random.py”,10号线,在 的main() 文件 “./random.py”,6号线,在主 x = random.randint(1,1000) AttributeError:'模块'对象没有属性'randint' – 2011-01-05 07:28:01

回答

9

您可能在当前目录中有一个名为random.py(或pyc)的文件。你可以找出你正在使用的随机模块来自做这个:

import random 
print(random.__file__) 
+0

FWIW,显然在Windows机器上,这在某些情况下不会给出完整路径。 – aaronasterling 2011-01-05 07:27:36

+0

回溯(最近最后调用): 文件 “./anothername.py”,第10行,在 主() 文件 “./anothername.py”,第6行,在主 X = random.randint( 1,1000) AttributeError:'模块'对象没有'randint'属性 – 2011-01-05 07:32:30

+1

@Empty Monty:将建议的代码*放在模块中。看看它打印什么。很可能你忘了删除random.pyc文件。 – 2011-01-05 07:34:53

2

好了,不要命名您的Python程序为random.py它命名为别的东西。口译人员对其模块和程序感到困惑。

3

python导入系统隐约地起作用如下。

  1. 执行如import foo这样的行。
  2. Python通过sys.path中的目录查找它们是按其出现顺序排列的列表。 sys.path中的第一个条目是主文件所在的目录。
  3. 当Python找到一个名为“foo.py”的文件时,它会执行它并将该文件的全局名称空间放在模块sys.modules['foo']中。
  4. Python将该模块绑定到原始导入发生的范围中的名称foo

因此,当您命名文件random.py时,python会在搜索标准库中的文件之前找到该文件。您正在用您的文件“屏蔽”random模块。

这是简化,并没有给出完整的图片。例如,它忽略.pyc文件。

+0

感谢您的详细解答。这一切现在都有意义。 – 2011-01-05 07:42:26

0

我解决了阅读这篇文章的同样的问题。我把我的文件命名为random.py 用大写字母开始文件名是不是更好,所以它与python模块不匹配,因为我像我这样的新手不会熟悉很多python模块。 谢谢