Mengapa Python Melemparkan Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat teratas\' dan Bagaimana Ia Boleh Dielakkan?

Barbara Streisand
Lepaskan: 2024-11-21 09:24:11
asal
340 orang telah melayarinya

Why Does Python Throw a

Import Relatif Melangkaui Pakej Peringkat Atas

Apabila mencuba import relatif dalam pakej Python berbilang peringkat, jalankan modul daripada direktori pakej boleh mengakibatkan ralat "ValueError: percubaan import relatif melebihi pakej peringkat atas". Memahami sebab di sebalik ralat ini adalah penting untuk pengurusan pakej yang berkesan.

Ralat berlaku kerana Python tidak mengekalkan rekod dari mana pakej dimuatkan. Melaksanakan modul sebagai "python -m test_A.test" pada dasarnya memberitahu Python bahawa test_A.test tidak terletak dalam pakej (walaupun ia berada dalam package/test_A). Akibatnya, percubaan "dari ..A import foo" menjadi tidak sah kerana Python tidak mempunyai pengetahuan tentang test_A sebagai sebahagian daripada pakej yang lebih besar.

Sebaliknya, menggunakan "python -m package.test_A.test" mengekalkan struktur hierarki dan membenarkan "from ..A import foo" diselesaikan dengan jayanya. Ia menggambarkan dengan tepat fakta bahawa test_A ialah direktori kanak-kanak dalam "pakej" pakej yang dimuatkan.

Sebab asas mengapa Python tidak menganggap direktori kerja semasa sebagai pakej tidak diketahui. Walau bagaimanapun, had ini boleh dikurangkan dengan mengisytiharkan direktori secara eksplisit sebagai pakej menggunakan fail "__init__.py" dan mematuhi mekanisme carian pakej Python apabila mengimport modul.

Atas ialah kandungan terperinci Mengapa Python Melemparkan Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat teratas\' dan Bagaimana Ia Boleh Dielakkan?. 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