Hirdetés

Új hozzászólás Aktív témák

  • Karma

    félisten

    válasz Jim-Y #3301 üzenetére

    Hogyhogy nem kezeli le? A második utasítás meg se fog hívódni, mert az exceptiontől kiszáll abból a belső blokkból. Ez a dolgok természetes rendje, a második függvényhívásig nem jut el a program se try blokkban, se anélkül, ha kivételt dob az első.

    A szóhasználat miatt nem jön át mit szeretnél, de azért próbálok valamit írni.

    Ha mindkettő elszállhat és mindkét hibát le akarod nyelni, akkor két try blokkot írsz egymás után.
    try {
    valami1();
    } catch (ex) {
    // kiirod, megeszed, egyremegy
    }

    try {
    valami2();
    } catch (ex) {
    }

    De ha mondjuk a második nem szállhat el, és meg akarod hívni az első hívás sikerességétől függetlenül, még akkor is ha továbbdobod a kivételt, akkor ott a finally.
    try {
    valami1();
    } catch (ex) {
    // kiirod, megeszed, egyremegy
    // vagy tovabbdobod a "throw ex;" sorral
    } finally {
    valami2();
    }

    Két try blokkot egymásba ágyazni tényleg nem szerencsés, mert amellett hogy egyre mélyebben kell indentálni, nem annyira szembetűnő hogy hiba esetén mi is történik.

    Mondjuk ha ezek a te függvényeid, akkor akár megírhatnád őket úgy, hogy csak akkor dobjanak kivételt, amikor ténylegesen valami nagy hiba történik, nem pedig a kivételek köré szervezed a logikát (klasszikus antipattern). A boolean visszatérési értékű függvények pl. jók erre.

    “All nothings are not equal.”

Új hozzászólás Aktív témák