Почему я получаю TypeError: объект 'module' не вызывается при попытке импортировать случайный модуль? - PullRequest
6 голосов
/ 20 апреля 2010

Я использую 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 ]

17 голосов
/ 20 апреля 2010

Назовите свой файл как-нибудь еще. В Python скрипт является модулем, имя которого определяется именем файла. Поэтому, когда вы запускаете свой файл random.py с import random, вы создаете цикл в структуре модуля.

6 голосов
/ 20 апреля 2010

Переименуйте файл примера программы в myrandom.py или что-то еще. Вы путаете импорт, я бы поставил.

2 голосов
/ 20 апреля 2010

Редактировать : похоже, у вас одно и то же имя со встроенным случайным модулем, поэтому вы должны изменить имя файла на что-то другое, как предлагали другие

но после этого вам все еще нужно изменить коды, чтобы начать случайный класс

rand=random.Random()

rand.uniform(10, 20)

, а также для других, потому что вы вызываете сам модуль, а не класс Random

>>> 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
>>>
1 голос
/ 20 апреля 2010

Ваш скрипт импортирует себя, так как он называется random.py, а затем пытается вызвать себя как метод. Переименуйте ваш скрипт во что-то другое (например, test.py), и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...