2014-07-23 2 views
0

python2.7에서 예외없는 (imo) 동작이 관찰되었습니다. 프로그램 구조는 다음과 같습니다Python의 특별 수입 사례

run.py 
package/ 
    __init__.py 
    a.py 
    b.py 

run.py :

from package import * 

초기화 평 :

from package.a import * 

지금 a.pyb.py 같은 빈 파일을 고려하십시오.

내 의견으로는,이 프로그램은 circural import 때문에 실패 할 것입니다. 왜? 우리가 수입 할 때 packageinit 파일은 절대 수입하고있는 동안 동일한 init 파일을 접근하는 것을 나타내는 수입품이 있기 때문에. 결과에서

from package.b import * 

우리가 ImportError를 나타납니다

는 상황이 바로 a.py이 추가 내게로 제외 볼 수 있습니다.

버그입니까, 아니면 예외입니까? 문서에서 아무 정보도 찾을 수 없습니다. 파일에있는 절대 수입을 특별 취급합니까?

+0

절대 또는 상대 가져 오기와 관련이 없습니다. – User

+0

구체적으로 작성하십시오. 나를 위해, 이것은 절대 수입이다. – badray

+0

@ 사용자의 요점은 절대 또는 상대 가져 오기를 사용했는지 여부에 관계없이 동작이 동일하다는 것입니다. 이것을보십시오 : http://stackoverflow.com/questions/744373/circular-or-cyclic-imports-in-python – aruisdante

답변

0

나는 똑같은 경우를 재현하려고 시도했는데, 나는 그날 질문을 게시하는 날에 매우 지쳤다. 질문이 잘못되었습니다 :). 절대 수입과 관련이 없다는 당신 말이 맞았습니다.

__init__.py은 가져 오는 동안 다른 모듈처럼 한 번만로드되며 이는 예외적 인 동작입니다. 따라서 from package.a import * (__init__.py__init__.py)과 같은 문구가 이미 sys.modules (폴더에서 상속 된 이름 포함,이 경우 package)에 있고 다시로드되지 않습니다.

원형 예외가 초기화되지 않은 모듈의 변수를 사용하려고 할 때만 순환 예외가 발생합니다. 예를 들어 a.py을 넣은 경우 __init__이 완전히 초기화되지 않았으므로 from package import * 인터프리터는 예외로 종료됩니다.