>  기사  >  백엔드 개발  >  Python에서 \'ValueError: 시도한 상대 가져오기를 넘어 최상위 패키지\' 오류가 발생하는 이유는 무엇입니까?

Python에서 \'ValueError: 시도한 상대 가져오기를 넘어 최상위 패키지\' 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-21 11:26:10535검색

Why Does Python Throw a

상대 가져오기에서 최상위 패키지 오류 초과

최상위 패키지 이상으로 상대 가져오기를 시도하면 Python에서 "ValueError: 시도됨"이 발생합니다. 최상위 패키지를 넘어서 상대 가져오기' 오류가 발생했습니다. 원인을 이해하기 위해 제공된 패키지 구조를 분석해 보겠습니다.

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py

test.py에서 from ..A import foo 줄은 A 하위 패키지에서 가져오려고 시도합니다. 이 하위 패키지는 내부에서 직접 액세스할 수 없습니다. test_A 서브패키지. Python에서는 현재 패키지 범위 내에서 상대 가져오기를 유지해야 합니다.

패키지 폴더 내에서 python -m test_A.test를 실행하면 Python은 test_A.test를 현재 패키지의 모듈로 해석합니다. 그러나 -m 플래그가 모듈을 직접 호출하므로 더 이상 패키지를 패키지로 간주하지 않습니다. 이로 인해 최상위 패키지(패키지)를 넘어서는 상대 가져오기 시도가 발생하여 오류가 발생합니다.

반대로 상위 폴더에서 python -m package.test_A.test를 실행하면 Python은 패키지를 인식합니다. 패키지로 제공되며 해당 범위 내에서 상대 가져오기를 허용합니다. 패키지 패키지 내에서 A 하위 패키지에 액세스할 수 있기 때문에 이는 from ..A import foo에서 성공적으로 해결됩니다.

이 오류는 상대 가져오기가 현재 패키지의 범위 내에 유지되도록 하는 것이 중요함을 강조합니다. -m 플래그를 사용하여 모듈을 직접 호출할 때 Python은 현재 작업 디렉터리를 패키지로 간주하지 않으므로 발생한 것과 같은 오류가 발생할 수 있습니다.

위 내용은 Python에서 \'ValueError: 시도한 상대 가져오기를 넘어 최상위 패키지\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.