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
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!