web-dev-qa-db-fra.com

L'objet 'module' n'a pas d'attribut 'choix' - essayer d'utiliser random.choice

Quelqu'un pourrait-il me dire ce que je fais peut-être de mal? Je reçois toujours ce message lorsque j'exécute mon code python:

import random

foo = ['a', 'b', 'c', 'd', 'e']

random_item = random.choice(foo)

print random_item

Erreur

AttributeError: l'objet 'module' n'a pas d'attribut 'choix'

17
AMHD

Tourné dans le noir: vous avez probablement nommé votre script random.py. Ne nommez pas votre script du même nom que le module.

Je dis cela parce que le module random a en effet une méthode choice, donc l'importation est probablement en train de saisir le mauvais module (lire: indésirable).

47
CoryKramer

pour moi le problème est que j'utilise

random.choices 

dans python 3.6 dev local mais le serveur est python3.5 ne dispose pas de cette méthode ...

15
tyan

Cela ressemble à un problème d'importation. Y a-t-il un autre module dans le même répertoire nommé random? Si oui (et si vous êtes sur python2, ce qui est évident d'après print random_item) alors c'est l'importer à la place. Essayez de ne pas masquer les noms intégrés.

Vous pouvez tester cela avec le code suivant:

import random

print random.__file__

L'actuel random.py le module de stdlib vit dans path/to/python/lib/random.py. Si le vôtre est ailleurs, cela vous dira où il se trouve.

6
Adam Smith

En bref, Python recherche dans le premier fichier qu'il trouve nommé "aléatoire" et ne trouve pas l'attribut de choix.

99,99% du temps, cela signifie que vous avez un fichier dans le chemin/répertoire qui est déjà nommé "aléatoire". Si c'est vrai, renommez-le et réessayez. Ça devrait marcher.

2
James

J'ai également obtenu cette erreur en nommant une méthode random comme celle-ci:

import random

def random():

  foo = ['a', 'b', 'c', 'd', 'e']

  random_item = random.choice(foo)

  print random_item

random()

Ce n'est pas votre cas (nommer un fichier random.py) mais pour ceux qui recherchent cette erreur et peuvent la commettre.

2
Trevor