2010-08-13 9 views

Respuesta

20

No estoy del todo convencido de que me guste, pero esto sería equivalente al de Python. Elimina el problema identificado con poner el código de éxito al final del bloque try.

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

En muchos casos (por ejemplo, métodos pequeños), puede volver a lanzar o regresar desde el bloque 'catch', por lo que puede simplemente poner la lógica' else' después de tye 'try-catch'. –

+3

-1 Para duplicar la semántica de la construcción de Python 'try-catch-else', debe * no * usar un bloque finally, ya que esto se ejecutará incluso si hay una excepción de 'retorno' o no detectada en el' try' bloquear. Simplemente coloque el bloque 'if (success)' después del 'try-catch'. – augurar

+2

Gracias @augurar - Jugué y volví a leer los documentos en otra cosa y estás en lo cierto. –

2

Si bien no hay una forma incorporada para hacer eso exactamente. Puede hacer algo similar para lograr resultados similares. Los comentarios explican por qué esto no es exactamente lo mismo.

Si se ejecuta la ejecución del somethingThatCouldError(), se imprimirá YAY!!. Si hay un error, se imprimirá 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 
} 

De esta manera es un poco menos explícito que Python. Pero logra el mismo efecto.

+3

Cerrar, pero ¿y si el código de "YAY" arroja una excepción? Imprimiría "YAY" y "SAD". –

+1

@ Adam, cierto. Pero, podrías poner el 'Yay' al final del' try'. – jjnguy

+1

Mi punto es que el manejador de excepciones puede ejecutarse incluso si 'somethingThatCouldError()' no lanza una excepción. No creo que eso sea exactamente lo que Greg quería. –

0

¿Qué tal esto?

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

Claro, hay algunos casos en los que desee poner más código después del try/catch/persona y esta solución no caben allí, pero funciona si es el único bloque try/catch en el método .

Cuestiones relacionadas