2010-05-08 18 views
18

Mi chiedevo se in python esistesse un modo semplice per eseguire il codice se un'istruzione try era riuscita che non era nell'istruzione try stessa. È questo che fanno i comandi else o finally (non ho capito la loro documentazione)? So che potrei usare un codice come questo:codice in esecuzione se le istruzioni try hanno avuto esito positivo in python

successful = False 
try: 
    #code that might fail 
    successful = True 
except: 
    #error handling if code failed 
if successful: 
    #code to run if try was successful that isn't part of try 

ma mi chiedevo se ci fosse un modo più breve.

+2

L'utilizzo di un valore 'tranne:' è una cattiva idea. È molto meglio fare 'except SomeSpecificError:' e gestire un'eccezione specifica che sai cosa fare con. 'except:' catturerà tutti i tipi di eccezioni che non si osservano, incluse cose come l'esaurimento della memoria o l'utente che preme ctrl-C. –

risposta

30

che vuoi "altro":

for i in [0, 1]: 
    try: 
     print '10/%i: ' % i, 10/i 
    except: 
     print 'Uh-Oh' 
    else: 
     print 'Yay!' 
+0

Yay! Alla fine l'ho risolto, il mio codice continuava a stampare con successo anche se l'eccezione continuava a succedere, ma ora so che puoi usare 'else' dopo' exept'. – answerSeeker

11

Stai cercando la parola chiave else:

try: 
    #code that might fail 
except SomeException: 
    #error handling if code failed 
else: 
    # do this if no exception occured 
-3

tuo blocco try dovrebbe essere il codice che si desidera eseguire, e la vostra eccezione dovrebbe essere uccidendo il programma. Dovrei capire meglio il tuo oggetto per dare una risposta migliore.

Nella programmazione OO, si desidera "Tell, do not ask", quindi mantenere tutta la logica che dovrebbe accadere nel blocco try e quindi la gestione degli errori nel blocco except.

+2

Non penso di essere tendenzialmente d'accordo con questa risposta. "il tuo eccetto dovrebbe uccidere il programma" è particolarmente difficile da inghiottire; abbiamo una gestione delle eccezioni, quindi possiamo, beh, gestire le eccezioni. Ciò è particolarmente vero in Python, dove le eccezioni sono usate liberamente e per cose come finire di scorrere su un iteratore, un evento che il 99% delle volte non è una condizione di fine del programma. Non verrei da nessuna parte vicino a un licenziamento generale di altri blocchi su try/tranne, dove solo dopo il successo si procede a fare qualcosa. Tra l'altro, spesso aiuta a mantenere i blocchi di prova brevi, il che è fantastico. –

+0

Hai assolutamente ragione. Ho scritto il codice di test per le ultime 3 settimane e l'ho affrontato dal punto di vista del fatto che se qualcosa non funziona voglio che il framework di test sia a conoscenza. Ho ancora difficoltà a superare il bisogno di un altro blocco, sembra interrompere il flusso di "Prova a fare questa cosa ... Se fallisce, gestiscilo" Non dovrebbe tutto quello che dovrebbe accadere nel caso in cui lì non è un fallimento nella sezione "Prova a fare questa cosa"? Ora avete qui la logica, quindi l'interruzione della logica e quindi la logica dopo l'interruzione che dovrebbe verificarsi SOLO se l'interruzione non si verifica ... –

Problemi correlati