none
Clase Tipo Exception

    Pregunta

  • Estimados poseo una clase Error que hereda de Exception
    public class Error : Exception
    {
    ....
    }
    Esta clase es para atrapar los errores y con ellos trabajar (creando un log de errores), el asunto es, cuando intento atrapar los errores en el catch de la siguiente forma
    Try{
    double c = 1/0;

    catch(Error e){

    ......

    }
    El asunto es que, pasa por el catch.
    ¿Que tengo que hacer para que el catch tome mi clase como tipo Exception?

    miércoles, 17 de abril de 2019 17:16

Respuestas

  • No, el "catch" no funciona como piensas: no se dispara cuando la excepción que ocurrió es la "madre" de la que has escrito, sino cuando es la "hija". Y desde luego, no cuando es una "hermana" como en este caso, es decir, ese try va a disparar un DivideByZeroException, que se puede interceptar con un "catch(Exception)" que es su "madre", pero no con un "catch(Error)" que es su "hermana" (hereda de Exception al igual que la excepción que ocurrió).

    Para que se dispare el catch(Error) se necesita que dentro del try se haya hecho un "throw new Error()", o un throw de una clase que herede de Error.

    miércoles, 17 de abril de 2019 17:39
    Moderador
  • hola

    >>¿Que tengo que hacer para que el catch tome mi clase como tipo Exception?

    tenes que usar dos catch

    try
    {
        int val = 0;
        
        //codigo
        
        if(val == 0){
            throw new Error();
        }
        
        double c = 1/val;

    }
    catch(Error e)
    {
        //codigo
    }
    catch(Exception e)
    {
        //codigo
    }

    si divides de forma incorrecta no genera magicamente tu exception, si creas una es para que ante alguna validacion puedas lanzarla

    sabes que dividor cero genera un problema lo validas y lanzar tu exception

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 17 de abril de 2019 23:32

Todas las respuestas

  • No, el "catch" no funciona como piensas: no se dispara cuando la excepción que ocurrió es la "madre" de la que has escrito, sino cuando es la "hija". Y desde luego, no cuando es una "hermana" como en este caso, es decir, ese try va a disparar un DivideByZeroException, que se puede interceptar con un "catch(Exception)" que es su "madre", pero no con un "catch(Error)" que es su "hermana" (hereda de Exception al igual que la excepción que ocurrió).

    Para que se dispare el catch(Error) se necesita que dentro del try se haya hecho un "throw new Error()", o un throw de una clase que herede de Error.

    miércoles, 17 de abril de 2019 17:39
    Moderador
  • hola

    >>¿Que tengo que hacer para que el catch tome mi clase como tipo Exception?

    tenes que usar dos catch

    try
    {
        int val = 0;
        
        //codigo
        
        if(val == 0){
            throw new Error();
        }
        
        double c = 1/val;

    }
    catch(Error e)
    {
        //codigo
    }
    catch(Exception e)
    {
        //codigo
    }

    si divides de forma incorrecta no genera magicamente tu exception, si creas una es para que ante alguna validacion puedas lanzarla

    sabes que dividor cero genera un problema lo validas y lanzar tu exception

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 17 de abril de 2019 23:32