Python con la dichiarazione - v'è la necessità per la gestione di file più vecchio stile?
-
10-10-2019 - |
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()
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"