web-dev-qa-db-ja.com

「モジュール」オブジェクトには属性「選択」がありません-random.choiceを使用しようとしています

誰かが私が間違っているかもしれないことを教えてもらえますか? pythonコードを実行すると、このメッセージが表示され続けます:

import random

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

random_item = random.choice(foo)

print random_item

エラー

AttributeError: 'module'オブジェクトには属性 'choice'がありません

17
AMHD

暗闇で撮影:おそらくスクリプトにrandom.py。スクリプトにモジュールと同じ名前を付けないでください。

randomモジュールには確かにchoiceメソッドがあるため、インポートはおそらく間違った(読み取り:望ましくない)モジュールを取得しているため、これを言います。

47
CoryKramer

私にとって問題は私が使うことです

random.choices 

python 3.6 local devですが、サーバーはpython3.5です。このメソッドはありません...

15
tyan

インポートの問題のように聞こえます。同じディレクトリにrandomという名前の別のモジュールがありますか?その場合(そしてpython [2]を使用している場合、これはprint random_itemから明らかです)、代わりにそれをインポートしています。組み込みの名前をシャドウしないようにしてください。

これは次のコードでテストできます。

import random

print random.__file__

Stdlibの実際のrandom.pyモジュールはpath/to/python/lib/random.pyにあります。あなたがどこかにいる場合、これはそれがどこにあるかを教えてくれます。

6
Adam Smith

要するに、Pythonは「ランダム」という名前の最初のファイルを探し、choice属性を見つけていません。

99.99%の確率で、パスまたはディレクトリにすでに「ランダム」という名前のファイルがあることを意味します。正しい場合は、名前を変更してもう一度お試しください。うまくいくはずです。

2
James

また、メソッドにrandomという名前を付けて、このエラーが発生しました。

import random

def random():

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

  random_item = random.choice(foo)

  print random_item

random()

それはあなたのケースではありません(ファイルに名前を付けるrandom.py)しかし、このエラーについて検索し、この間違いをする可能性がある他の人のために。

2
Trevor