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. :)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top