Domanda

Con avere la dichiarazione with, c'è sempre la necessità di aprire un file / verificare la presenza di eccezioni / do chiusura manuale delle risorse, come in

try:
  f = open('myfile.txt')

  for line in f:
    print line
except IOError:
  print 'Could not open/read file'
finally:
  f.close()
È stato utile?

Soluzione

I tuoi tentativi di codice in corso per gestire l'eccezione del file non viene trovato, o di autorizzazioni di accesso insufficienti, ecc, che un blocco with open(file) as f: non avrebbe fatto.

Inoltre, in questo caso, il blocco finally: avrebbe sollevato un NameError poiché f non sarebbe stato definito.

In un blocco with, tutte le eccezioni (di qualsiasi tipo, forse una divisione per zero nel codice) che si verifica all'interno del blocco sarà ancora essere sollevato, ma anche se non si gestirlo , il file sarà sempre chiuso correttamente. Questo è qualcosa di completamente diverso.

Ciò che si vuole è probabilmente:

try:
    with open("myfile.txt") as f:
        do_Stuff()  # even if this raises an exception, f will be closed.
except IOError:
    print "Couldn't open/read myfile.txt"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top