Operando su contenuti di un file, nonostante un guasto nel blocco 'con'
-
03-10-2019 - |
Domanda
Ho appena scritto un programma di utilità in Python per fare qualcosa che ho bisogno (irrilevante, ma è di generare un file di tag ctags-compatibili per un DSL in-house).
comunque- Sono aprire e leggere il file nel contesto di una dichiarazione with
, e sono curioso, come fanno le persone tendono a gestire gli errori in questo processo?
La mia soluzione è
with open(filename, 'rt') as f:
content = f.read()
matches = re.findall(REGEX, content)
if len(matches) > 0:
# do more stuff...
pass
ho messo l'esterno partita controllo del l'istruzione with perché mi piace avere il file chiuso e fatto con. Tuttavia, se content
non viene mai costruito, questo fallirà.
La mia soluzione era per inizializzare content
alla stringa vuota appena sopra questo pezzo di codice, ma la sensazione che provo è che mi piacerebbe la funzione solo per fine; un'eccezione viene buttato fuori dalla funzione o qualcosa del genere.
In questo caso, ho potuto mettere il resto della funzione nel blocco with
ma che amplia il campo di applicazione del file aperto. Posso creare content
prima del blocco with
modo che esiste in luce di un guasto. Sono curioso, tuttavia, quali altre soluzioni la gente piace vedere (assumendo che la domanda ha un senso, in primo luogo)?
suppongo che avrei sorta come qualcosa di simile a questo:
with open(filename, 'rt') as f:
content = f.read()
else:
content = ''
matches = re.findall(REGEX, content)
I accetterà l'idea che ho solo bisogno di trattare con esso e lasciare il file aperto per il resto della funzione se questo è il consenso generale. :)
Soluzione
Quello che vorrei fare è come lei ha detto:
content = ''
with open(filename, 'rt') as f:
content = f.read()
matches = re.findall(REGEX, content)
come costo di regexing e controllando partite sarebbe trascurabile per una stringa vuota.
Tuttavia, chiudendo immediatamente il file non è importante fintanto che è chiuso alla fine, partendo dal presupposto che non riutilizzarlo.