Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Python Melemparkan Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat atas\'?

Mengapa Python Melemparkan Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat atas\'?

Mary-Kate Olsen
Lepaskan: 2024-11-21 11:26:10
asal
645 orang telah melayarinya

Why Does Python Throw a

Melangkaui Ralat Pakej Peringkat Atas dalam Import Relatif

Apabila mencuba import relatif melebihi pakej peringkat atas, Python melemparkan "ValueError: cuba ralat import relatif melebihi pakej peringkat atas". Untuk memahami puncanya, mari kita analisa struktur pakej yang disediakan:

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py
Salin selepas log masuk

Dalam test.py, baris daripada ..A import foo cuba mengimport daripada subpakej A, yang tidak boleh diakses secara langsung dari dalam test_A subpakej. Python memerlukan import relatif untuk kekal dalam skop pakej semasa.

Apabila melaksanakan python -m test_A.test dari dalam folder pakej, Python mentafsir test_A.test sebagai modul dalam pakej semasa. Walau bagaimanapun, ia tidak lagi menganggap pakej sebagai pakej kerana bendera -m memanggil modul secara langsung. Ini mengakibatkan percubaan import relatif melangkaui pakej peringkat atas (pakej), justeru mencetuskan ralat.

Sebaliknya, apabila melaksanakan python -m package.test_A.test daripada folder induk, Python mengenali pakej sebagai pakej dan membenarkan import relatif dalam skopnya. Ini berjaya diselesaikan daripada ..A import foo kerana subpakej A boleh diakses dalam pakej pakej.

Ralat ini menyerlahkan kepentingan memastikan import relatif kekal dalam skop pakej semasa. Apabila menggunakan modul secara langsung menggunakan bendera -m, Python tidak menganggap direktori kerja semasa sebagai pakej, yang boleh membawa kepada ralat seperti yang dihadapi.

Atas ialah kandungan terperinci Mengapa Python Melemparkan Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat atas\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan