3.17.1 Exemples

La fonction suivante émule ce qui était l'instruction standard d'importation jusqu'à Python 1.4 (c'est-à-dire sans noms de modules hiérarchiques). (Cette implémentation ne fonctionnerait pas dans cette version, puisque find_module() a été étendue et que load_module() a été ajoutée en 1.4.)

import imp import sys

def __import__(nom, globaux=None, locaux=None, depuisliste=None):
    # Raccourci : voit si le module a déjà été importé
    try:
        return sys.modules[name]
    except KeyError:
        pass

    # Si l'un des appels suivants déclenche une exception, 
    # il y a un problème que nous ne savons pas gérer -- laissons l'appelant s'en charger

    fp, chemin, description = imp.find_module(name)

    try:
        return imp.load_module(nom, fp, chemin, description)
    finally:
        # Puisque nous pouvons sortir via une exception, ferme fp explicitement.
        if fp:
            fp.close()

Un exemple plus complet qui implémente les noms de modules hiérarchiques et inclut une focntion reload() se trouve dans le module knee (qui ne sert que d'exemple - ce n'est en aucune façon une interface standard).