[python] AttributeError : ‘module’객체에 속성이 없습니다

두 개의 파이썬 모듈이 있습니다 :

a.py

import b

def hello():
  print "hello"

print "a.py"
print hello()
print b.hi()

b.py

import a

def hi():
  print "hi"

내가 실행하면 a.py, 내가 얻을 :

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

오류는 무엇을 의미합니까? 어떻게 고치나요?



답변

상호 최상위 수입품은 거의 항상 나쁜 생각입니다.

파이썬에서 실제로 상호 가져 오기가 필요한 경우이를 수행하는 방법은 함수 내에서 가져 오는 것입니다.

# In b.py:
def cause_a_to_do_something():
    import a
    a.do_something()

이제 a.py는 import b문제없이 안전하게 할 수 있습니다.

(처음에는 호출 할 때마다 cause_a_to_do_something()수행되기 때문에 매우 비효율적 인 것처럼 보일 수 import있지만 실제로 가져 오기 작업은 처음에만 수행됩니다. 모듈을 가져올 때 두 번째 및 그 이후에는 빠른 작업입니다. )


답변

또한 표준 Python 모듈 중 하나와 이름이 같은 모듈을 실수로 명명 할 때이 오류가 발생했습니다. 예를 들어 commands파이썬 라이브러리 모듈 이라는 모듈이 있습니다. 로컬 개발 환경에서 올바르게 작동했지만 Google App Engine에서 실행할 때 지정된 오류로 실패하여 추적하기가 어려웠습니다.


답변

문제는 모듈 간의 순환 종속성입니다. a수입 bb수입 a. 그러나 그들 중 하나가 먼저로드해야 – 모듈을 초기화까지이 경우 파이썬 종료에 a이전 b하고 b.hi()당신이 접근을하려고 할 때 아직 존재하지 않습니다 a.


답변

잘못된 방법으로 가져온 열거 형을 참조 하여이 오류가 발생했습니다. 예 :

from package import MyEnumClass
# ...
# in some method:
return MyEnumClass.Member

올바른 수입 :

from package.MyEnumClass import MyEnumClass

누군가를 돕는 희망


답변

모듈을 실제로 가져 오지 않았기 때문에이 오류가 발생했습니다. 코드는 다음과 같습니다.

import a.b, a.c

# ...

something(a.b)
something(a.c)
something(a.d)  # My addition, which failed.

마지막 줄은 AttributeError. 그 이유는 a( a.ba.c) 의 하위 모듈을 명시 적으로 가져온다는 사실을 알지 못했기 때문에 import실제로 명령문을 가져온 것으로 가정했습니다 a.


답변

나는 같은 문제에 직면했다. 를 사용하여 수정했습니다 reload.

import the_module_name
from importlib import reload
reload(the_module_name)


답변

git에서 이전 버전의 저장소를 체크 아웃 할 때이 문제가 발생했습니다. 힘내 내 .py파일을 교체 했지만 추적되지 않은 .pyc파일을 남겼습니다 . 때문에 .py파일과 .pyc파일 동기화 밖으로했다는 importA의 명령 .py파일에서 해당 모듈을 찾을 수 없습니다 .pyc파일.

해결책은 단순히 .pyc파일 을 삭제하고 자동으로 재생성하는 것입니다.