as en Python : renommer un import ou nommer un contexte

Le mot-clé as donne un nom local à ce qui vient d'être obtenu : un module importé, une exception attrapée, une ressource ouverte par with.
5 min de lecture
Believemy logo

Définition

Trois situations reviennent sans arrêt quand on écrit du Python. Un module utile porte un nom à rallonge, à retaper à chaque ligne. Une erreur est attrapée, mais rien ne permet de savoir laquelle ni pourquoi. Un fichier est ouvert, et encore faut-il pouvoir le lire ensuite. Les trois posent la même question : sous quel nom manipuler ce que l'on vient d'obtenir ?

as est la réponse de Python. Il attribue un nom local à ce qui vient d'être désigné juste avant lui, et ce nom devient utilisable dans la portée qui suit. Le mécanisme est minuscule, mais il évite trois contorsions qui reviendraient sinon dans presque chaque fichier.

Voici les trois positions côte à côte, hors de tout programme, pour en reconnaître la silhouette.

PYTHON
import pandas as pd                        # renommer un module importé
except ValueError as erreur:               # nommer l'exception attrapée
with open("data.csv") as fichier:          # nommer la ressource ouverte

Elles ne se ressemblent pas, et pourtant l'intention est la même : donner un nom court à ce qui n'en a pas.


Renommer un import

C'est l'usage le plus visible, et le plus facile à justifier. Répéter matplotlib.pyplot devant chaque appel d'un script de graphiques allonge les lignes sans rien apprendre à personne. plt dit la même chose en trois lettres.

Certaines bibliothèques ont un alias si répandu qu'il fait partie de leur identité : pd pour pandas, np pour numpy, plt pour matplotlib. Ce sont des conventions, et c'est là leur valeur : un lecteur qui croise pd.read_csv sait d'où vient la fonction sans remonter en haut du fichier. Inventer son propre alias casse ce réflexe.

Le second service rendu se voit moins : as règle les collisions de noms. Deux modules qui exposent chacun une fonction load ne peuvent pas cohabiter tels quels, le second import écrasant silencieusement le premier. Renommer l'un des deux à l'import lève l'ambiguïté, et le code dit alors laquelle des deux il appelle.


Nommer une exception

Un bloc except écrit sans as attrape bien l'erreur, mais il ne vous en remet rien. Vous savez qu'une exception de type ValueError est passée par là ; vous ignorez quelle valeur l'a provoquée, et le message que Python avait rédigé est perdu.

as met cet objet à votre disposition, sous le nom de votre choix. La différence se mesure le jour d'un incident : un journal qui répète « saisie refusée » n'apprend rien, alors qu'un journal qui précise laquelle règle l'affaire en une minute.

PYTHON
try:
    montant = int(saisie)
except ValueError as erreur:
    journaliser(f"Saisie refusée : {erreur}")

L'objet ainsi nommé porte le message d'erreur et, selon son type, des attributs renseignés pour vous : le nom du fichier introuvable, la clé absente du dictionnaire, l'indice hors limites.

Attention

Ce nom disparaît à la sortie du bloc : Python exécute l'équivalent d'un del pour libérer la mémoire retenue par la trace. Le relire juste après déclenche un NameError, alors que l'affectation se voit trois lignes plus haut. Si la valeur doit survivre, recopiez-la dans une autre variable à l'intérieur du except.


Nommer une ressource

Un fichier ouvert doit être refermé, une connexion également. Oublier cette fermeture ne provoque aucune erreur immédiate : le programme fonctionne, puis sature en fichiers ouverts au bout de quelques milliers d'itérations.

with confie l'ouverture et la fermeture à un gestionnaire de contexte, et as nomme ce que ce gestionnaire produit : le fichier ouvert, la connexion établie, le verrou pris. La fermeture est garantie à la sortie du bloc, même si une erreur interrompt le traitement, ce qui rend le couple try et finally superflu ici.

Bon à savoir

Depuis Python 3.10, as occupe une quatrième position : l'instruction match, où il nomme une partie du motif reconnu. L'intention ne change pas, mais cette forme ne se rencontre que dans du code récent.


Un mot-clé, pas une fonction

as appartient à la grammaire du langage, au même titre que if ou return, et deux conséquences pratiques en découlent.

La première : le nom est réservé. Écrire as = 3 ne crée pas une variable mal choisie, cela déclenche une SyntaxError et le programme refuse de démarrer.

La seconde est plus utile. as ne fonctionne que dans les positions prévues par la grammaire : renommer après coup une valeur déjà obtenue passe par une affectation ordinaire, court = un_nom_tres_long. Cette limite devient un repère à la lecture d'un code inconnu, puisqu'un as se trouve toujours sur un import, une exception, un contexte ou un motif, jamais au milieu d'un calcul.


Questions fréquentes

Question

Faut-il toujours renommer les imports longs ?

Non, deux cas seulement le justifient : l'alias est une convention que tout le monde reconnaît, ou le nom complet alourdit vraiment la lecture parce qu'il revient à chaque ligne. Sinon, le nom d'origine reste le plus clair, et un alias inventé pour une bibliothèque connue produit l'effet inverse de celui recherché.

Question

Le nom donné par as existe-t-il après le bloc ?

Cela dépend du contexte, et la différence surprend. Après un with, la variable existe toujours, mais la ressource qu'elle désigne est fermée : la relire ne sert plus à rien. Après un except, le nom lui-même a été supprimé, et sa lecture déclenche une NameError.

Question

Peut-on renommer plusieurs éléments dans un seul import ?

Oui, chaque élément importé peut recevoir son propre alias sur la même ligne, par exemple from module import a as x, b as y. La lisibilité pose toutefois sa limite : au-delà de deux ou trois renommages, la ligne devient un dictionnaire à déchiffrer, et mieux vaut la couper.

Termes connexes

Découvrez notre glossaire Python

Parcourez les termes et définitions les plus couramment utilisés dans le domaine du développement avec Python.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.