Credo che il punto rispetto al try...except...else
è che si tratta di un errore facile da usare per creare stato incoerente, piuttosto che risolvere il problema. Non è che dovrebbe essere evitato a tutti i costi, ma può essere controproducente.
considerare:
try:
file = open('somefile','r')
except IOError:
logger.error("File not found!")
else:
# Some file operations
file.close()
# Some code that no longer explicitly references 'file'
Sarebbe davvero bello dire che il blocco di cui sopra ha impedito di codice di tentare di accedere a un file che non esisteva, o di una directory per i quali l'utente non ha i permessi, e per dire che tutto è incapsulato perché è all'interno di un blocco try...except...else
. Ma in realtà, un sacco di codice nel modulo sopra in realtà dovrebbe essere simile a questo:
try:
file = open('somefile','r')
except IOError:
logger.error("File not found!")
return False
# Some file operations
file.close()
# Some code that no longer explicitly references 'file'
Siete spesso ingannare se stessi dicendo che a causa file
non fa più riferimento di portata, è bene andare sulla codifica dopo la blocco, ma in molti casi qualcosa verrà fuori dove non va bene. O forse una variabile verrà successivamente creata all'interno del blocco else
che non è stato creato nel blocco except
.
In questo modo dovrei differenziare lo if...else
da try...except...else
. In entrambi i casi, è necessario rendere i blocchi paralleli nella maggior parte dei casi (le variabili e lo stato impostato in uno dovrebbero essere impostati nell'altro), ma nel secondo caso, i programmatori spesso non lo fanno, probabilmente perché è impossibile o irrilevante. In questi casi, spesso sarà più sensato tornare al chiamante piuttosto che cercare di continuare a lavorare su ciò che pensi di avere nel migliore dei casi.
fonte
2009-05-14 21:50:38
Ciao dF. In una simile zona di pericolo: a = b = c = 2 –
E per quanto riguarda i loop, potrebbero girare per sempre quando non li vuoi. Sembra un po 'esagerato se ti sbarazzi delle funzionalità linguistiche potenzialmente pericolose. – Milhous