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

Mengapa Saya Mendapat Ralat \'ValueError: percubaan import relatif melebihi pakej peringkat atas\' dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-26 04:48:14552semak imbas

Why Am I Getting a

Ralat Import Relatif: Melangkaui Pakej Peringkat Atas

Dalam Python 3, import relatif menyediakan cara yang mudah untuk merujuk kepada modul dalam yang sama direktori atau pakej. Walau bagaimanapun, menghadapi ralat "ValueError: percubaan import relatif melebihi pakej peringkat atas" boleh membingungkan.

Pertimbangkan struktur pakej berikut:

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

Apabila cuba mengimport modul daripada sub-pakej (cth., daripada ..A import foo dalam test.py), anda mungkin menghadapi ralat yang disebutkan di atas jika syarat berikut adalah bertemu:

  1. Anda sedang menjalankan modul (cth., python -m test_A.test) dari dalam direktori pakej (pakej/), dan
  2. Anda tidak menggunakan arahan yang menentukan pakej sebagai pakej peringkat teratas (cth., python -m package.test_A.test).

The sebab ralat ini berpunca daripada aspek asas mekanisme import Python. Apabila pakej dimuatkan, ia dianggap sebagai "pakej peringkat atasan", dan import relatif hanya boleh merujuk modul dalam pakej tersebut atau sub-pakejnya. Walau bagaimanapun, Python tidak secara automatik mengiktiraf direktori induk pakej sebagai pakej apabila menjalankan modul secara langsung.

Oleh itu, dalam senario di atas, apabila anda menjalankan python -m test_A.test dari dalam direktori pakej, induk direktori ('pakej/') tidak dilihat sebagai pakej, dan import relatif daripada ..Import foo secara berkesan cuba melangkaui peringkat teratas pakej.

Untuk menyelesaikan ralat ini, pastikan anda menentukan keseluruhan laluan pakej semasa menjalankan modul:

python -m package.test_A.test

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

Kenyataan:
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