2016-11-10 1 views
0

내 코드의 일부 모듈이 서로 호출 할 때 디버거에 문제가 있습니다. 실용 예 :Python 스파이더 디버그가 순환 가져 오기와 함께 작동하지 않습니다.

파일 dog.py는 다음 코드가 포함이 :

import dog 
print("Cat") 

내가 dog.py를 실행 (또는 고양이 :

import cat 
print("Dog") 

파일 cat.py는 다음과 .py) 문제가 없으며 프로그램이 원활하게 실행됩니다. 그러나 디버깅하려고하면 전체 스파이더가 멈추고 프로그램을 종료해야합니다.

어떻게 해결할 수 있습니까? 모듈이 다른 모듈에있는 함수를 사용하므로이 순환 가져 오기를 사용하고 싶습니다.

감사합니다.

답변

2

dog.py (또는 cat.py)를 실행하면 아무런 문제가 없으며 프로그램이 원활하게 실행됩니다. 모듈이 (여기에 "개"또는 "고양이")로 자신의 이름으로 수입되는 동안 스크립트, 특별한 이름 ("__main__")에서 가져온 주로 때문입니다

AFAICT. 주의 : 스크립트와 모듈 간의 유일한 차이점은 실제로로드되어 파이썬 런타임 (python dog.py)에 전달되거나 스크립트 또는 import 문을 사용하는 모듈에서 가져온 것입니다.

(실제로 원형 수입 문제는 내가 위에서 설명하는 것보다 조금 더 복잡하지만, 좀 더 지식이있는 사람이 떠날거야.)

짧은 긴 이야기를 만들려면 :이 특정 사용을 제외하고 케이스 (실제로 더 많은 부작용이 있음), 파이썬은 이 아니며 순환 수입을 지원하지 않습니다. 다른 스크립트 또는 모듈에서 공유하는 함수 (클래스, 기타)가있는 경우 이러한 함수를 다른 모듈에 넣습니다. 또는 두 개의 모듈이 실제로 서로에 의존한다는 것을 알게되면, 단일 모듈로 다시 그룹화하거나 동일한 모듈에서 서로 의존하는 부분을 재 그룹화하거나 하나 이상의 다른 모듈에서 다른 부분을 재 그룹화 할 수 있습니다.

또한 stdlib에만 의존하는 사소한 원 샷 유틸리티가 아니면 스크립트의 내용이 종종 명령 행 인수를 구문 분석하고/config 파일을 읽는 등의 기능을 사용하여 더 잘 축소되어 필요한 모듈을 가져옵니다. 효과적인 프로세스를 시작하는 것입니다.

+0

감사합니다. bruno. 그러나 디버깅 할 때 스크립트가 어떻게 작동하지 않습니까? 그 차이점은 무엇입니까? – riccio777

+0

@ riccio777 스파이더를 사용하지 않기 때문에 실제로 알 수는 없지만 검사를 위해 모듈을 가져 오기 위해 노력하고 있습니다 (실제 모듈 이름 아래에 있음). 순환 가져 오기를 처리하려고하면 오류가 발생합니다. –