2009-11-17 14 views
5

Tuve una excepción en algún código hoy: "A [alguna excepción] no fue manejado".¿Cómo puede el código en un bloque "try ... catch" arrojar una excepción no controlada?

Sin embargo, este código estaba claramente dentro del bloque "try" de una estructura "try/catch".

¿Qué me falta aquí?

Actualización: Es C#

Actualización: Oh, olvídalo. Resulta que el mecanismo específico de error es que soy un idiota. No hay una solución para esto.

+3

¿Qué idioma/marco está utilizando? – stusmith

+0

¿Se puede publicar algún código? –

+0

Si publica su código, podría ser más fácil diagnosticar su problema –

Respuesta

5

¿La declaración catch especifica un tipo específico de excepción?

Si lo hace, solo detectará ese tipo de excepción.

+0

Estoy atrapando "Excepción". ¿No todos derivan de eso? – Deane

+0

No necesariamente, intenta no especificar nada en absoluto en el bloque catch. –

2

¿Estaba ejecutando un depurador con "excepciones de interrupción"/"ruptura en lanzamiento" activado? En este caso, verá la excepción antes de pasarla al try/catch.

+0

Esto estaba en el depurador, sí. Esto podría ser. En Visual Studio, ¿es una configuración en algún lugar? – Deane

+0

Cuando obtuviste la excepción, ¿podrías continuar y luego ver que vaya al try/catch? La configuración de la excepción se encuentra normalmente en "Depurar-> Excepciones". Dependiendo del idioma, hay diferentes cosas que puedes hacer. –

1

Tengo 10 dólares que dice que es una excepción ThreadAbortException o alguna otra excepción arrojada por ti mismo. Si ese es el caso, debe atrapar la excepción dos veces.

0

Sin conocer el idioma es difícil de decir, pero muchos idiomas tienen el concepto de excepciones que no se pueden capturar; por ejemplo, en .NET, OutOfMemoryException y ExecutionEngineException (entre otros) no se pueden capturar, ya que son esencialmente no recuperables .

3

algunos problemas causados ​​por la recursividad, como las excepciones de StackOverFlow y similares arrojarán dentro de try ... catch bloques porque en realidad no se lanzan desde ninguna línea de código particular dentro del bloque, sino más bien por el CLR. Esto también es cierto para las excepciones de memoria fuera de rango y otros problemas que no son el resultado directo de ninguna línea de código.

Tal vez usted está hablando de algo como esto:

alt text

4

excepciones no administrados no son capturados por catch (Exception e), puede intentar una

try 
    { 
    } 
    catch 
    { 
    } 

en lugar de

 try 
     { 
     } 
     catch (Exception e) 
     { 
     } 
Cuestiones relacionadas