Új tananyag!
Elkészült a Python programnyelv for ciklus tananyaga, interaktív kódrészletekkel, mintakódokkal.

<info9>

Hibakezelés: a try... catch... finally

Bármennyire is törekszünk rá, az alkalmazás futásában előfordulhatnak hibák. Akár azért, mert a felhasználó nem a várt adatokat írja be, például szám helyett szöveget, vagy akár azért, mert valamilyen egyéb folyamat meghiúsul, például a megnyitni kívánt fájl nem található, vagy az írni kívánt fájlt épp egy másik folyamat használja. Számtalan hibalehetőség előfordulhat, azonban ezen hibák nagyja esetén nem feltétlen szükséges, hogy a program rögtön összeomoljon. Sok esetben a hiba diszkrét jelzése is elégséges, ráadásul segítség is lehet a felhasználónak a hiba orvoslásához.

A hibakezelés legegyszerűbb módja a try vezérlési szerkezet. Ez a szerkezet két, vagy három részből áll. Az első része mindenképp egy try blokk, ezen belül helyezzük el azt a kódot, amelynek a hibáit észlelni szeretnénk, majd ezt követheti egy catch, és/vagy egy finally blokk. A catch blokk teszi lehetővé a hiba elkapását és kezelését – az ebben lévő kódrészlet kizárólag akkor fut le, ha a try blokkban hiba következett be. A catch blokkban egy objektumon keresztül elérjük a pontos hibaüzenetet is, így tudjuk megfelelően tájékoztatni a felhasználót. A finally blokk pedig arra használható, hogy megadjunk benne egy olyan kódrészletet, aminek mindenképp le kell futnia, akár hiba történt, akár nem.

Normál esetben hiba esetén a futtatás megszakad. Így előfordulhat, hogy egy megnyitott fájl nem kerül lezárásra, vagy bármi hasonló váratlan esemény következik be, ha a program egy szokatlan ponton omlik össze. Ezt áthidalandó, érdemes a hálózati kommunikáció lezárását, fájlok lezárását, esetlegesen adatok mentését, stb. a finally blokkban elhelyezni, hogy a program biztosan egy biztonságos állapotban léphessen ki.

Mintakód try-catch szerkezetre

try
{

    int szam = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Minden ok");
}
catch(Exception e)
{

    Console.WriteLine("Hiba: " + e.Message);
}

Ha számot írunk be, ez a kód a Minden ok üzenetet írja a képernyőre. Ha azonban szöveget írunk be, akkor a Hiba: Input string was not in a correct format. szöveg jelenik meg. Ekkor nem jelenik meg a Minden ok üzenet, mert a try blokk futása a hiba bekövetkeztekor megszakad, a program rögtön a catch blokkba ugrik. Próbáld ki a kódrészletet ide kattintva a böngésződben!

Webtárhely, 5% kedvezménnyel!

Most, hogy belevágtál a programozásba, jól jönne egy olcsó webtárhely? A SzerverPlex kedvező árú cPanel tárhelyeit most 5% kedvezménnyel igénybeveheted, és ezzel az info9 fennmaradását is támogatod.

Kattints a gombra, majd a csomag kiválasztása után aktiváld az INFO9 kuponkódot a fizetés előtt.

Szerzek webtárhelyet!

Mintakód try-catch-finally szerkezetre

try
{

    int szam = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Minden ok");
}
catch(Exception e)
{

     Console.WriteLine("Hiba: " + e.Message);
}
finally {

    Console.WriteLine("Vége");
}

Ha számot írunk be, a Minden ok és a Vége felirat jelenik meg. Ha szöveget írunk be, akkor a Hiba: Input string was not in a correct format. szöveg, majd a Vége szöveg is megjelenik. Ezt a kódot is kipróbálhatod és szerkesztheted ide kattintva.

Hibák készítése

Amennyiben az általunk írt kód valamelyik részlete fut hibára, és szeretnénk ezt egy tényleges hiba formájában jelezni, használhatjuk a C# throw kulcsszavát saját hibák létrehozására:

throw new Exception("Egyedi hibaüzenet");

Természetesen egyedi hibaosztályokat is készíthetünk az Exception osztályból történő öröklés segítségével, de egyszerűbb programokban az általános hiba használata is megfelelő lehet. Ezeket a hibákat ugyanúgy elkaphatjuk egy try-catch vezérlési szerkezettel.