Python LanguageGestori di contesto ("con" istruzione)

introduzione

Sebbene i gestori di contesto di Python siano ampiamente utilizzati, pochi capiscono lo scopo dietro il loro uso. Queste istruzioni, comunemente utilizzate con i file di lettura e scrittura, aiutano l'applicazione a conservare la memoria di sistema e a migliorare la gestione delle risorse assicurando che risorse specifiche siano utilizzate solo per determinati processi. Questo argomento spiega e dimostra l'uso dei gestori di contesto di Python.

Sintassi

  • con "context_manager" (come "alias") (, "context_manager" (come "alias")?) *:

Osservazioni

I gestori di contesto sono definiti in PEP 343 . Sono destinati a essere usati come meccanismo più succinto per la gestione delle risorse rispetto a try ... finally costrutti. La definizione formale è la seguente.

In questo PEP, i gestori di contesto forniscono i __enter__() e __exit__() che vengono richiamati all'ingresso e all'uscita dal corpo __enter__() with.

Quindi continua a definire l'istruzione with come segue.

with EXPR as VAR:
    BLOCK

La traduzione della dichiarazione di cui sopra è:

   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)

Gestori di contesto ("con" istruzione) Esempi correlati