c exception handling tutorial with code examples
Spracovanie výnimiek je metóda na riešenie chýb, ktoré sa môžu vyskytnúť počas vykonávania programu. Tento tutoriál vysvetľuje spracovanie výnimiek v C # s príkladmi kódu:
Staňte sa bezplatným testerom hier
Spracovanie výnimiek sa používa na zabezpečenie toho, aby tok programu pokračoval, aj keď dôjde k chybe za behu. Výnimkou sú objekty, ktoré sú vyhodené pri narazení na akúkoľvek runtime chybu.
Ak sa výnimky nespracujú, potom C # vygeneruje správu o výnimke a ukončí program, a práve tu sa do obrazu dostane spracovanie výnimiek.
=> Prečítajte si C # Sprievodcu pre začiatočníkov tu
Čo sa dozviete:
- Čo sú výnimky?
- Kľúčové slová pre spracovanie výnimiek
- Triedy výnimiek prítomné v C #
- Spracovanie výnimiek v C #
- Záver
- Odporúčané čítanie
Čo sú výnimky?
Výnimkou sú bezprecedentné chyby, ktoré sa môžu vo vašom programe vyskytnúť počas behu programu. Programátori väčšinou dokážu ľahko zistiť niektoré chyby, napríklad overenie alebo kontrolu nuly, alebo pri overovaní niektorých hodnôt.
Ale existujú určité obdobia, keď nemôžeme predvídať, čo alebo kedy sa objaví chyba. Napríklad, povedzme, že hľadám súbor na danom mieste. Môj program bude fungovať úplne v poriadku, kým nebude súbor k dispozícii. Ak sa súbor nejako vymazal, môj program vyhodí chybu.
Výnimky sa nevyskytujú pravidelne, ale stále sa môžu vyskytnúť a vždy s nimi budete chcieť zaobchádzať opatrne. Na ich riešenie používame spracovanie výnimiek.
Kedykoľvek sa vyskytne chyba, povieme, že je vyhodená, „vyhodená“ je objekt z Systém. Výnimka trieda v C #. The Systém. Výnimka trieda ponúka rôzne metódy a vlastnosti, ktoré poskytujú podrobnosti o chybe, s ktorou sa váš program práve stretol.
Rovnako ako vlastnosť sledovania zásobníka, ktorá poskytuje zásobník, pre ktorý sa vyskytol problém, alebo vlastnosť správy, ktorá poskytuje popis výnimky.
Kľúčové slová pre spracovanie výnimiek
Výnimky ponúkajú postup na kontrolu určitej časti programu, takže aj keď v tejto časti existuje výnimka, potom sa riadenie programu prenesie do inej časti programu. V C # je spracovanie výnimiek v zásade postavené na štyroch kľúčových slovách: hádzať, skúšať, chytať a nakoniec .
hodiť
Ako sme už hovorili, hod je predmetom z Systém. Výnimka triedy v C #. Umožňuje programu hodiť chybu vždy, keď na ňu narazí.
skús
Try block ohraničuje blok kódu, ktorý môže spôsobiť, že program vyvolá výnimku. Za ním nasleduje jeden alebo viac blokov úlovku.
chytiť
Keď blok bloku narazí na výnimku, poskytne ovládaciemu prvku blok bloku na zachytenie výnimky. Blok catch môže obsahovať aj sadu kódov, ktoré program musí vykonať v prípade výnimky, alebo môže iba zachytiť výnimku a neurobiť nič v závislosti od scenára a požiadavky.
najlepší nástroj na správu testovacích prípadov pre džiru
konečne
Posledný blok sa používa na vykonanie konkrétneho fragmentu kódu alebo pokynu bez ohľadu na výskyt výnimky. Nakoniec sa blok vždy vykoná a môže sa vykonať hneď po bloku, ktorý sa snaží, ak program nenájde žiadnu výnimku, alebo sa môže vykonať po bloku catch, keď program zachytí výnimku.
Triedy výnimiek prítomné v C #
Všetky výnimky v C # sú odvodené priamo alebo nepriamo z Systém. Výnimka trieda.
Pozrime sa stručne na niektoré z najbežnejších výnimiek:
- Výnimka System.IO.IO: Spracováva všetky chyby súvisiace so vstupom a výstupom.
- System.DividedByZeroException: Spracuje chybu vyvolanú, keď je číslo delené nulou.
- System.NullReferenceException : Spracováva všetky chyby, ktoré sa môžu vyskytnúť pri odkazovaní na nulový objekt.
- System.IndexOutOfRangeException: Spracováva chybu vyvolanú, keď sa program pokúsi získať prístup k indexu, ktorý je mimo rozsahu pre pole.
- System.OutOfMemoryException: Spracováva chybu vyvolanú z dôvodu nedostatočnej prítomnosti pamäte.
Spracovanie výnimiek v C #
C # má veľmi dobre definované riešenie pre prácu s akýmkoľvek typom výnimiek, ktoré sa môžu vyskytnúť pri použití bloku try and catch. Pomocou tohto bloku možno oddeliť základné vyhlásenie programu od ostatných príkazov.
Príklad:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
V príklade vyššie sme uviedli náš kód na otvorenie súboru v bloku try. Pretože sme neposkytli žiadnu platnú cestu k súboru, kód by mal spôsobiť chybu. Teraz sme zachytili chybu v našom bloku úlovkov. Ak súbor v danej ceste k súboru neexistuje, potom kód vyvolá FileNotFoundException.
Túto výnimku zachytí blok catch, kde sme už definovali očakávanú výnimku. Teraz si predstavme, že ak náš kód vyvolá nejakú inú výnimku, okrem tej, ktorú sme už definovali, náš blok ju nebude schopný zachytiť. Aby sme zachytili akúkoľvek všeobecnú výnimku, pridáme ďalší blok zachytenia.
Pozrime sa na náš aktualizovaný kód:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.ReadLine(); } } }
Tento všeobecný blok zachytenia bude schopný zachytiť všetky výnimky, ktoré môžu byť vyvolané vo vnútri bloku vyskúšania. Teraz teda pridajme konečne blok, ktorý to dokončí. Aby sme to zjednodušili, vytlačme si správu pomocou bloku konečne.
ručné testovanie otázok a odpovedí pre skúsených
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
Tu sme práve pridali blok konečne s jednoduchou správou. Do bloku môžete pridať aj niekoľko vlastných príkazov. Celková štruktúra programu ale zostane podobná tej, ktorá je tu zobrazená.
Blok Nakoniec sa vždy vykoná bez ohľadu na to, či existuje alebo nie je výnimka. Program sa začne od bloku try a potom sa presunie priamo do bloku final, ak neexistujú chyby / výnimky. Ak narazí na výnimku, presunie sa najskôr na chytenie a potom vykoná posledný blok.
Existuje podmienka, keď sa blok konečne nevykoná?
Ako naznačuje názov, posledný blok sa vykoná na konci a je posledným blokom kódu, ktorý sa vykoná. Nakoniec sa blok spustí vždy, keď je aplikácia spustená. Jediný čas, kedy sa blok nakoniec nespustí, je ten, keď aplikácia spadne alebo je zámerne zabitá pomocou príkazu procesu.
Záver
Ak výnimky nie sú spracované správne, spôsobia vo vašom programe chybu. Ak ste nikde vo svojom kóde nepoužili bloky pokusu / chytenia, program sa preruší a zobrazí sa správa s výnimkou. Pre generického používateľa bude veľmi ťažké vysledovať chybu späť k zdrojovému kódu a vyriešiť ju.
Preto je vždy dobrým zvykom poskytnúť vo vašom programe spracovanie výnimiek.
Vzorový kód
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
=> Tu si pozrite našu kompletnú sériu školení C #
Odporúčané čítanie
- Výukový program pre funkcie / metódy C # s príkladmi kódu
- Výukový program pre Python DateTime s príkladmi
- Výukový program SVN: Správa zdrojového kódu pomocou subverzie
- C # String Tutorial - Metódy reťazcov s príkladmi kódu
- Spracovanie výnimiek v C ++
- Výukový program pre korytnačky SVN: Revízie v úložisku kódov
- Výukový program AWS CodeBuild: Extrahovanie kódu z Maven Build
- Ako zvládnuť výnimku v skriptoch SoapUI Groovy - SoapUI Tutorial # 11