2014-09-05 49 views
9

Czy ktoś mógłby mi powiedzieć, co robię źle. Wciąż dostaję ten komunikat gdy uruchamiam mojego kodu Pythona:Obiekt "moduł" nie ma atrybutu "wybór" - próba użycia random.choice

import random 

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

random_item = random.choice(foo) 

print random_item 

Error

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

+0

Co dokładnie chcesz zrobić? – mlwn

+2

@mlwn Oni chcą wybrać losowy przedmiot z listy 'foo', czy to nie oczywiste? – CoryKramer

+0

Kod działa idealnie dla mnie ... Którą wersję python używasz? A który os? – mlwn

Odpowiedz

6

Brzmi jak problem importu. Czy istnieje inny moduł w tym samym katalogu o nazwie random? Jeśli tak, (jeśli jesteś na python2, co jest oczywiste z print random_item), to zamiast tego importujesz. Staraj się nie ukrywać wbudowanych nazw.

Można to sprawdzić za pomocą następującego kodu:

import random 

print random.__file__ 

Rzeczywista random.py moduł z stdlib mieszka w path/to/python/lib/random.py. Jeśli twoja jest gdzie indziej, powie ci, gdzie ona jest.

+0

Czy nie jest to normalnie 'path/to/python/lib/pythonX.Y/random.py' (chyba, że ​​używa on naprawdę starego Pythona, myślę, że przed 2.3) ? Ponadto, nie sądzę, że 2.7 daje ci plik .py, nawet jeśli istnieje plik .pyc w sposób opisany w sekcji 3.3+, więc prawdopodobnie "random.pyc", ale mógłbym to błędnie odczytać. Ale poza tym małym, dziwacznym kawałkiem, wspaniała odpowiedź. – abarnert

+0

Zapisany plik znajduje się na moim pulpicie. – AMHD

+0

@abarnert Testowałem na moim Python3.3 i otrzymałem '" C: \ Python33 \ lib \ random.py "' –

27

Strzał w ciemności: Prawdopodobnie nazwałeś swój skrypt random.py. Nie nadawaj skryptowi tej samej nazwy co moduł.

Mówię to, ponieważ moduł random rzeczywiście ma metodę choice, więc import prawdopodobnie złapał zły (czytaj: niepożądany) moduł.

+0

Jeśli to nie rozwiąże problemu, sprawdź również plik random.pyc. – zimbu668

1

W skrócie, Python szuka w pierwszym znalezionym pliku o nazwie "losowy" i nie znajduje atrybutu wyboru.

99,99% czasu, co oznacza, że ​​masz plik w ścieżce/katalogu, który już nazywa się "losowy". Jeśli to prawda, zmień nazwę i spróbuj ponownie. Powinno działać.

1

ja też mam ten błąd nazywając metodę random tak:

import random 

def random(): 

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

    random_item = random.choice(foo) 

    print random_item 

random() 

To nie twoja sprawa (nazywając plik random.py), ale dla innych, które wyszukują o tym błędzie i może popełnić ten błąd.