Объект '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), но для других, которые ищут эту ошибку и могут сделать эту ошибку.