2011-01-05 12 views
2

Pythonに新しく、乱数ジェネレータを実行しようとしています。しかし、私はランダムモジュールをインポートする際に問題があります。ランダムモジュールから何かを使用しようとすると、私はAttributeErrorを取得します。ご協力いただきありがとうございます。Pythonでのモジュールのインポートと使用

#!/usr/bin/python -tt 

import random 

def main(): 
    x = random.randint(1,1000) 
    print x 

if __name__ == '__main__': 
    main() 
+4

正確なエラーは何ですか?このコードは問題ありません。 – user225312

+0

乱数ジェネレーターについての質問ではないので、[乱数ジェネレーター]を削除しました。モジュールをインポートするだけです。 トレースバック(最新の呼び出しの最後):ここで – aaronasterling

+0

は誤りであるメイン で メイン() ファイル "./random.py" で ファイル "./random.py"、10行目、6行目、 x = random.randint(1,1000) AttributeError: 'module'オブジェクトに 'randint'属性がありません –

答えて

9

おそらく、現在のディレクトリにrandom.py(またはpyc)という名前のファイルがあります。あなたが使用しているランダムなモジュールがこれを行うことにより、どこから来たあなたは見つけることができます:

import random 
print(random.__file__) 
+0

FWIW、明らかにWindowsマシン上では、状況によっては完全なパスが得られません。 – aaronasterling

+0

トレースバック(最新の呼び出しの最後):X = random.randintメイン の主 () ファイル "./anothername.py" で ファイル "./anothername.py"、10行目、6行目、( 1,1000) AttributeError: 'module'オブジェクトに 'randint'属性がありません –

+1

@ Empty Monty:推奨コード*をモジュールに入れてください。それが何を印刷するかを見てください。ほとんどの場合、random.pycファイルを削除するのを忘れた可能性があります。 –

2

わかりましたが、それ何か他のものとしてrandom.py名としてあなたのpythonプログラムに名前を付けるいけません。インタプリタはモジュールとプログラムによって混乱しています。

3

Pythonのインポートシステムは、次のように曖昧に機能します。

  1. import fooのような行が実行されます。
  2. Pythonは、sys.pathのディレクトリを、順番にリストを探します。 sys.pathの最初のエントリは、メインファイルが存在するディレクトリです。
  3. "foo.py"という名前のファイルをPythonが見つけたら、それを実行してそのファイルのグローバル名前空間をモジュールsys.modules['foo']に置きます。
  4. Pythonは、元のインポートが発生するスコープ内の名前fooにそのモジュールをバインドします。

したがって、ファイル名をrandom.pyとすると、pythonは標準ライブラリのファイルを検索する前にそのファイルを見つけます。あなたはファイルにrandomモジュールを「シャドーイング」しています。

これは単純化されており、完全な画像を提供していません。たとえば、.pycファイルは無視されます。

+0

詳細な回答ありがとうございます。これは今、すべて意味があります。 –

0

私はこの記事を読んで同じ問題を解決しました。私はrandom.pyという名前のファイルを持っていました 大文字でファイル名を始める方が良いのではないでしょうか?それでは、Pythonモジュールとマッチしないので、私のようなルーキーは多くのPythonモジュールに慣れていません。 ありがとう

関連する問題