2014-09-05 38 views
9

Birisi bana yanlış ne yaptığımı söyler misiniz?'Module' nesnesi 'choice' özelliğine sahip değil - random.choice'i kullanmaya çalışıyorum

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

+0

Tam olarak ne yapmak istiyorsun lütfen? – mlwn

+2

@mlwn Listeden 'foo' rastgele bir öğe seçmek istiyorlar, bu açık değil mi? – CoryKramer

+0

Kod benim için kusursuz çalışıyor ... Hangi python sürümünü kullanıyorsunuz? Ve hangi os? Yani sorulan mlwn iki sorudan _either_ açıklamıyor: Ben pycharm topluluk baskısının son sürümünü çalıştırıyorum – mlwn

cevap

6

bir ithalat sorunu gibi geliyor

import random 

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

random_item = random.choice(foo) 

print random_item 

Hata: Ben piton kodu çalıştırdığınızda bu mesajı alıyorum. Aynı dizinde random adlı başka bir modül var mı? Eğer öyleyse (ve eğer print random_item'dan açık olan python2 üzerindeyseniz), bunun yerine onu içe aktarır. Yerleşik adları gölgelemeyin.

Aşağıdaki kod ile bu test edebilirsiniz: stdlib dan

import random 

print random.__file__ 

fiili random.py modül path/to/python/lib/random.py yaşıyor. Seninki başka bir yerdeyse, bu nerede olduğunu söyleyecektir.

+0

Normalde 'path/to/python/lib/pythonX.Y/random.py' değil (gerçekten eski bir Python kullanmıyorsa, 2.3'ten önce düşünüyorum) ? Ayrıca, 3,3 +, belki de random.pyc 'bir .pyc var olsa bile, 2.7 size .py dosyası verir sanmıyorum, ama ben bunu yanlış anlama olabilir. Ama bu küçük nitpicky bitinden başka, harika cevap. – abarnert

+0

Kaydedilmiş olduğum dosya benim masaüstümde. – AMHD

+0

@abarnert benim Python3.3 üzerinde test ve 'got "C: \ Python33 \ lib \ random.py"' –

27

Karanlıkta çekim: Muhtemelen betiğinize random.py adını verdiniz. Komut dosyanızı, modülle aynı adı vermeyin.

Bunun nedeni, random modülünün gerçekten choice yöntemine sahip olmasından dolayıdır, bu nedenle içe aktarma muhtemelen yanlış (okuma: istenmeyen) modülünü yakalar. Kısacası

+0

Eğer bu düzeltmezse, bir random.pyc dosyasını da kontrol edin. – zimbu668

1

, Python en çok "rastgele" adlı koyduğu ilk dosyada arayan ve seçim niteliği bulamamaktadır. zamanın

% 99.99, yani zaten "rastgele" adını taşıyordu yol/dizininde bir dosya var demektir. Bu doğruysa, yeniden adlandırın ve tekrar deneyin. İşe yaramalı.

1

Ben de böyle bir yöntemi random adlandırarak bu hata var:

import random 

def random(): 

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

    random_item = random.choice(foo) 

    print random_item 

random() 

O (bir dosya random.py adlandırma) senin böyle değil ama bu hata hakkında arama ve bu hatayı yapabilir diğerleri için.

İlgili konular