Maison > développement back-end > Tutoriel Python > Pourquoi Python renvoie-t-il une erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » ?

Pourquoi Python renvoie-t-il une erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » ?

Mary-Kate Olsen
Libérer: 2024-11-21 11:26:10
original
593 Les gens l'ont consulté

Why Does Python Throw a

Erreur de package au-delà du niveau supérieur lors de l'importation relative

Lors d'une tentative d'importation relative au-delà du package de niveau supérieur, Python renvoie une erreur « ValueError : tentative erreur d'importation relative au-delà du package de niveau supérieur. Pour comprendre la cause, analysons la structure du package fournie :

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py
Copier après la connexion

Dans test.py, la ligne de ..A import foo tente d'importer depuis le sous-paquet A, qui n'est pas directement accessible depuis le test_A sous-paquet. Python nécessite que les importations relatives restent dans la portée du package actuel.

Lors de l'exécution de python -m test_A.test à partir du dossier du package, Python interprète test_A.test comme un module dans le package actuel. Cependant, il ne considère plus le package comme un package puisque l'option -m appelle directement le module. Cela entraîne la tentative d'importation relative allant au-delà du package de niveau supérieur (package), déclenchant ainsi l'erreur.

En revanche, lors de l'exécution de python -m package.test_A.test à partir du dossier parent, Python reconnaît le package en tant que package et permet des importations relatives dans sa portée. Ceci est résolu avec succès à partir de ..A import foo car le sous-package A est accessible dans le package package.

Cette erreur souligne l'importance de garantir que les importations relatives restent dans la portée du package actuel. Lors de l'appel de modules directement à l'aide de l'option -m, Python ne considère pas le répertoire de travail actuel comme un package, ce qui peut entraîner des erreurs comme celle rencontrée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal