Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus?
Ü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
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!