2016-08-24 24 views
0

hereからモジュールの読み込みを読み込んでいました。AttributeError: 'module'オブジェクトに 'x'属性がありません

私のディレクトリmod_a.pymod_b.pyのいずれかに2つのファイルがあります。 mod_b.py Iグラムを実行しながら、しかし

at top of mod_a 
at top of mod_b 
at top of mod_a 
mod_a: defining x 
mod_b: defining y 
mod_a: defining x 

mod_b.pyは、私は次の出力を得たmod_a.pyファイルを実行する上

print 'at top of mod_b' 
import mod_a 
print 'mod_b: defining y' 
y = mod_a.x 

が含まれていながら、

mod_a.pyは、以下の

print 'at top of mod_a' 
import mod_b 
print 'mod_a: defining x' 
x = 5 

が含まれています次の出力:

at top of mod_b 
at top of mod_a 
at top of mod_b 
mod_b: defining y 
Traceback (most recent call last): 
    File "D:\Python\Workspace\Problems-2\mod_b.py", line 2, in <module> 
    import mod_a 
    File "D:\Python\Workspace\Problems-2\mod_a.py", line 2, in <module> 
    import mod_b 
    File "D:\Python\Workspace\Problems-2\mod_b.py", line 4, in <module> 
    y = mod_a.x 
AttributeError: 'module' object has no attribute 'x' 

誰でもこの説明をしていただけますか?

+8

に比べmod_b

print 'at top of mod_b' import mod_a # Importing a... print 'at top of mod_a' import mod_b # Importing b... print 'at top of mod_b' import mod_a # ... will happen, but... print 'mod_b: defining y' y = mod_a.x # error print 'mod_a: defining x' x = 5 print 'mod_b: defining y' y = mod_a.x 

のこの "トレース" を参照してください。それをしないでください。これはあなたがするときに起こることです。 – user2357112

+0

@ user2357112、ありがとう、私はこれを学習し、練習することを試みた。ここで問題になっているのは、正確に循環輸入がいかに正確であるかを説明してください。 –

+1

https://docs.python.org/2/faq/programming.html#how-can-i-have-modules-that-mutually-import-each-other – user2357112

答えて

0

それはmod_a.xがまだ定義されていないmod_b.pyを、インポートされ、mod_a.pyかかわらず実行されますので、コードはこの1行

import mod_a 

で失敗します。明確にするために

、あなたは円形の輸入を持ってmod_a

print 'at top of mod_a' 
import mod_b # Importing b... 

    print 'at top of mod_b' 
    import mod_a # Importing a... 

     print 'at top of mod_a' 
     import mod_b # Recurses... 
     print 'mod_a: defining x' 
     x = 5      # definition 

    print 'mod_b: defining y' 
    y = mod_a.x     # it's defined... no error 

print 'mod_a: defining x' 
x = 5 
関連する問題