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

Mary-Kate Olsen
Lepaskan: 2024-11-21 11:26:10
asal
522 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!

sumber:php.cn
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