Warum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus?

Mary-Kate Olsen
Freigeben: 2024-11-21 11:26:10
Original
522 Leute haben es durchsucht

Why Does Python Throw a

Über Paketfehler der obersten Ebene hinaus beim relativen Import

Beim Versuch, relative Importe über das Paket der obersten Ebene hinaus durchzuführen, gibt Python einen „ValueError: versucht“ aus Fehler „relativer Import über Paket der obersten Ebene hinaus“. Um die Ursache zu verstehen, analysieren wir die bereitgestellte Paketstruktur:

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py
Nach dem Login kopieren

In test.py versucht die Zeile von ..A import foo, aus dem Unterpaket A zu importieren, auf das nicht direkt aus dem zugegriffen werden kann test_Ein Unterpaket. Python erfordert, dass relative Importe im Rahmen des aktuellen Pakets bleiben.

Beim Ausführen von python -m test_A.test aus dem Paketordner heraus interpretiert Python test_A.test als Modul im aktuellen Paket. Allerdings wird das Paket nicht mehr als Paket betrachtet, da das Flag -m das Modul direkt aufruft. Dies führt dazu, dass der relative Importversuch über das Paket der obersten Ebene (Paket) hinausgeht und somit den Fehler auslöst.

Im Gegensatz dazu erkennt Python das Paket, wenn python -m package.test_A.test aus dem übergeordneten Ordner ausgeführt wird als Paket und erlaubt relative Importe innerhalb seines Geltungsbereichs. Dies wird erfolgreich von ..A import foo aufgelöst, da auf das A-Unterpaket innerhalb des Paketpakets zugegriffen werden kann.

Dieser Fehler unterstreicht, wie wichtig es ist, sicherzustellen, dass relative Importe im Geltungsbereich des aktuellen Pakets bleiben. Beim direkten Aufrufen von Modulen mit dem Flag -m betrachtet Python das aktuelle Arbeitsverzeichnis nicht als Paket, was zu Fehlern wie dem aufgetretenen führen kann.

Das obige ist der detaillierte Inhalt vonWarum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage