2010-08-13 8 views
32

Come si fa a provare eccetto in Java come farei in Python?Java - Come eseguire Python's Try Except Else

Esempio:

try: 
    something() 
except SomethingException,err: 
    print 'error' 
else: 
    print 'succeeded' 

vedo cercare di catturare menzionati, ma nient'altro.

risposta

20

Non sono del tutto convinto che mi piaccia, ma questo sarebbe equivalente al resto di Python. Elimina il problema identificato inserendo il codice di successo alla fine del blocco try.

bool success = true; 
try { 
    something(); 
} catch (Exception e) { 
    success = false; 
    // other exception handling 
} 
if (success) { 
    // equivalent of Python else goes here 
} 
+0

In molti casi (ad esempio, piccoli metodi), si può rilanciare o tornare dal blocco 'catch', quindi è sufficiente inserire la logica' else' dopo aver tye 'try-catch 'del tutto. –

+3

-1 Per duplicare la semantica del costrutto 'try-catch-else' di Python, dovresti * non * usare un blocco finally, poiché verrà eseguito anche se c'è un' return' o un'eccezione non rilevata nel 'try'. bloccare. Basta mettere il blocco 'if (successo)' dopo il 'try-catch'. – augurar

+2

Grazie @augurar - Ho giocato in giro e riletto i documenti su altro e tu sei davvero corretto. –

2

Mentre non esiste un modo incorporato per fare esattamente la cosa. Puoi fare qualcosa di simile per ottenere risultati simili. I commenti spiegano perché questa non è la stessa identica cosa.

Se l'esecuzione di somethingThatCouldError() passa, verrà stampato YAY!!. Se si verifica un errore, verrà stampato SAD.

try { 
    somethingThatCouldError(); 
    System.out.println("YAY!!"); 
    // More general, code that needs to be executed in the case of success 
} catch (Exception e) { 
    System.out.println("SAD"); 
    // code for the failure case 
} 

Questo modo è un po 'meno esplicito di Python. Ma raggiunge lo stesso effetto.

+3

Chiudi, ma cosa succede se il codice sotto "YAY" genera un'eccezione? Stamperebbe "YAY" e "SAD". –

+1

@Adam, vero. Ma potresti semplicemente mettere il 'Yay' in fondo al' try'. – jjnguy

+1

Il mio punto è che il gestore di eccezioni può essere eseguito anche se 'somethingThisCouldError()' non lancia un'eccezione. Non penso che sia esattamente ciò che Greg voleva. –

0

Che dire di questo?

try { 
    something(); 
} catch (Exception e) { 
    // exception handling 
    return; 
} 
// equivalent of Python else goes here 

Certo, ci sono alcuni casi in cui si desidera mettere più codice dopo il try/catch/else e questa soluzione non si adattano lì, ma funziona se è l'unico blocco try/catch nel metodo .

Problemi correlati