Ho ottenuto che il with
dichiarazione aiuterà a trasformare questo:Come "with" è meglio di try/catch per aprire un file in Python?
try:
f = open(my_file)
do_stuff_that_fails()
except:
pass
finally:
f.close()
Into:
with open(my_file) as f:
do_stuff_that_fails()
Ma come è meglio? Hai ancora avuto modo di gestire il caso con il file non essere in grado di essere aperto (come si richiede all'utente di dirgli che non dispone di autorizzazioni), quindi in realtà si avrebbe:
try:
with open(my_file) as f:
do_stuff_that_fails()
except (IOError, OSError, Failure) as e:
do_stuff_when_it_doesnt_work()
Che è equivalente a:
try:
f = open(my_file)
do_stuff_that_fails()
except (IOError, OSError, Faillure) as e:
do_stuff_when_it_doesnt_work()
finally:
f.close()
Sì, avete guadagnato due linee, ma è stato aggiunto un livello di nidificazione wich non lo rende più facile da leggere. Lo scopo dell'istruzione with
è di salvarti due righe o mi manca qualcosa?
Sembra molto aggiungere una parola chiave solo per questo, quindi mi sento come se ci fosse qualche sintassi per gestire il tentativo aggiuntivo/tranne che non so.
"with" sta per essere un * nome tag * terribile, soggetto a abuso newbie. Possiamo trovare qualcosa di meglio? – Charles
+1 Che ne dici di with-keyword? –
Python ha bisogno di un: trywith aprire ('qualunque', 'r') come f: .... eccezione (bla): .... – Will