Объект 'module' не имеет атрибута 'choice' - пытается использовать random.choice
Может кто-нибудь, пожалуйста, скажите мне, что я могу делать неправильно. Я продолжаю получать это сообщение, когда запускаю свой код на Python:
import random
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
Ошибка
AttributeError: объект 'module' не имеет атрибута 'choice'
Ответы
Ответ 1
Выстрел в темноте. Вероятно, вы назвали свой script random.py
. Не называйте свой script тем же именем, что и модуль.
Я говорю это, потому что модуль random
действительно имеет метод choice
, поэтому импорт, вероятно, захватывает неправильный (читаемый: нежелательный) модуль.
Ответ 2
Звучит как проблема импорта. Есть ли другой модуль в том же каталоге с именем random
? Если это так (и если вы находитесь на python2, что очевидно из print random_item
), вместо этого он импортирует это. Не пытайтесь затенять встроенные имена.
Вы можете проверить это с помощью следующего кода:
import random
print random.__file__
Фактический random.py
модуль из stdlib живет в path/to/python/lib/random.py
. Если ваш находится где-то в другом месте, это скажет вам, где оно находится.
Ответ 3
для меня проблема в том, что я использую
random.choices
в python 3.6 локальный dev, но сервер python3.5 не имеет этого метода...
Ответ 4
Короче говоря, Python ищет в первом найденном файле имя "random" и не находит атрибут выбора.
99,99% времени, это означает, что у вас есть файл в каталоге path/, который уже называется "random". Если это правда, переименуйте его и повторите попытку. Он должен работать.
Ответ 5
Я также получил эту ошибку, назвав метод random
следующим образом:
import random
def random():
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
random()
Это не ваше дело (именование файла random.py
), но для других, которые ищут эту ошибку и могут сделать эту ошибку.