为什么我会得到一个TypeError:'module'对象在尝试导入随机模块时是不可调用的?

时间:2010-04-20 03:04:18

标签: python

我正在使用Python 2.6并尝试运行一个简单的随机数生成器程序(random.py):

import random

for i in range(5):

    # random float: 0.0 <= number < 1.0
    print random.random(),

    # random float: 10 <= number < 20
    print random.uniform(10, 20),

    # random integer: 100 <= number <= 1000
    print random.randint(100, 1000),

    # random integer: even numbers in 100 <= number < 1000
    print random.randrange(100, 1000, 2)

我现在收到以下错误:

C:\Users\Developer\Documents\PythonDemo>python random.py
Traceback (most recent call last):
  File "random.py", line 3, in <module>
    import random
  File "C:\Users\Developer\Documents\PythonDemo\random.py", line 8, in <module>
    print random.random(),
TypeError: 'module' object is not callable

C:\Users\Developer\Documents\PythonDemo>

我查看了Python文档,这个版本的Python支持随机。还有其他我想念的东西吗?

4 个答案:

答案 0 :(得分:17)

将您的文件命名为其他内容。在Python中,脚本一个模块,其名称由文件名决定。因此,当您使用random.py开始文件import random时,您将在模块结构中创建一个循环。

答案 1 :(得分:6)

将示例程序文件重命名为myrandom.py或其他内容。你会混淆输入我打赌。

答案 2 :(得分:2)

修改:看起来你的内置随机模块名称相同,所以你应该像其他人建议的那样将文件名更改为其他内容

但在此之后,您仍需要更改代码以启动Random class

rand=random.Random()

rand.uniform(10, 20)

以及其他人因为你正在调用模块本身,而不是随机类

>>> for i in range(5):
...     # random float: 0.0 <= number < 1.0
...     print rand.random(),
...
...     # random float: 10 <= number < 20
...     print rand.uniform(10, 20),
...
...     # random integer: 100 <= number <= 1000
...     print rand.randint(100, 1000),
...
...     # random integer: even numbers in 100 <= number < 1000
...     print rand.randrange(100, 1000, 2)
...
0.024357795662 12.3296648076 886 478
0.698607283236 16.7373296747 245 638
0.69796131038 14.739388574 888 482
0.543171786714 11.3463795339 106 744
0.752849564435 19.4115177118 998 780
>>>

答案 3 :(得分:1)

您的脚本正在导入自身,因为它名为random.py,然后尝试将自身称为方法。将您的脚本重命名为其他内容(例如test.py),它将起作用。