2014-09-05 7 views
9

Könnte mir bitte jemand sagen, was ich falsch mache. Ich erhalte diese Meldung, wenn ich meine Python-Code ausführen:'Modul' Objekt hat kein Attribut 'Choice' - versuchen, random.choice zu verwenden

import random 

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

random_item = random.choice(foo) 

print random_item 

Fehler

AttributeError: 'module' object has no attribute 'choice'

+0

Was genau möchten Sie bitte tun? – mlwn

+2

@mlwn Sie wollen ein zufälliges Element aus ihrer Liste 'foo' auswählen, ist das nicht offensichtlich? – CoryKramer

+0

Der Code funktioniert perfekt für mich ... Welche Version von Python verwenden Sie? Und welches os? – mlwn

Antwort

6

wie ein Import Problem Sounds. Befindet sich ein anderes Modul im selben Verzeichnis mit dem Namen random? Wenn ja (und wenn Sie auf Python2 sind, was von print random_item offensichtlich ist), dann importiert es stattdessen. Versuchen Sie nicht, vordefinierte Namen zu überschreiben.

Sie können dies testen mit dem folgenden Code:

import random 

print random.__file__ 

Die tatsächlichen random.py Module von stdlib leben in path/to/python/lib/random.py. Wenn deine woanders ist, wird dir das sagen wo es ist.

+0

Ist es normalerweise 'pfad/zu/python/lib/pythonX.Y/random.py' (es sei denn, er benutzt einen wirklich alten Python, ich denke vor 2.3 oder so) ? Außerdem glaube ich nicht, dass 2.7 dir die .py-Datei liefert, selbst wenn es eine .pyc-Methode gibt, wie es 3.3+ tut, also wahrscheinlich 'random.pyc', aber das könnte ich falsch verstehen. Aber anders als das kleine pingelige bisschen, großartige Antwort. – abarnert

+0

Ich habe meine Datei auf meinem Desktop gespeichert. – AMHD

+0

@abarnert Ich habe auf meinem Python3.3 getestet und habe '" C: \ Python33 \ lib \ random.py "' –

27

Erschossen im Dunkeln: Sie haben wahrscheinlich Ihr Skript random.py genannt. Benennen Sie Ihr Skript nicht mit dem Namen des Moduls.

Ich sage das, weil das random Modul tatsächlich eine choice Methode hat, so dass der Import wahrscheinlich das falsche (lesen: unerwünschte) Modul ergreift.

+0

Wenn dies nicht behoben wird, überprüfen Sie auch eine random.pyc-Datei. – zimbu668

1

Kurz gesagt, Python sucht in der ersten Datei namens "random" und findet das Auswahlattribut nicht.

99,99% der Zeit, das heißt, Sie haben eine Datei im Pfad/Verzeichnis, die bereits "zufällig" genannt wird. Wenn das stimmt, benennen Sie es um und versuchen Sie es erneut. Es sollte funktionieren.

1

Ich habe auch diesen Fehler durch ein Verfahren random wie diese Namensgebung:

import random 

def random(): 

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

    random_item = random.choice(foo) 

    print random_item 

random() 

Es ist nicht Ihr Fall aber für andere (eine Datei random.py Namensgebung), die zu diesem Fehler zu suchen und diesen Fehler machen kann.