Python LanguageGestionnaires de contexte (déclaration «avec»)


Introduction

Bien que les gestionnaires de contexte de Python soient largement utilisés, peu de personnes comprennent le but de leur utilisation. Ces instructions, couramment utilisées avec les fichiers de lecture et d'écriture, aident l'application à conserver la mémoire système et à améliorer la gestion des ressources en garantissant que certaines ressources ne sont utilisées que pour certains processus. Cette rubrique explique et illustre l'utilisation des gestionnaires de contexte de Python.

Syntaxe

  • avec "context_manager" (comme "alias") (, "context_manager" (comme "alias")?) *:

Remarques

Les gestionnaires de contexte sont définis dans PEP 343 . Ils sont destinés à être utilisés comme mécanisme plus succinct pour la gestion des ressources que d' try ... finally construire. La définition formelle est la suivante.

Dans ce PEP, les gestionnaires de contexte fournissent les __enter__() et __exit__() qui sont appelées à l'entrée et à la sortie du corps de l'instruction with.

Il continue ensuite à définir l'instruction with comme suit.

with EXPR as VAR:
    BLOCK

La traduction de la déclaration ci-dessus est la suivante:

   mgr = (EXPR)
   exit = type(mgr).__exit__  # Not calling it yet
   value = type(mgr).__enter__(mgr)
   exc = True
   try:
       try:
           VAR = value  # Only if "as VAR" is present
           BLOCK
       except:
           # The exceptional case is handled here
           exc = False
           if not exit(mgr, *sys.exc_info()):
               raise
           # The exception is swallowed if exit() returns true
   finally:
       # The normal and non-local-goto cases are handled here
       if exc:
           exit(mgr, None, None, None)

Gestionnaires de contexte (déclaration «avec») Exemples Liés