c exception handling tutorial with code examples
Undtagelsesbehandling er en metode til at håndtere fejl, der kan opstå under udførelsen af et program. Denne vejledning forklarer undtagelseshåndtering i C # med kodeeksempler:
dfs ved hjælp af stack c ++
Undtagelseshåndtering bruges til at sikre, at programflowet fortsættes, selvom der er en runtime-fejl. Undtagelser er de objekter, der smides, når der opstår en runtime-fejl.
Hvis undtagelserne ikke håndteres, producerer C # en undtagelsesmeddelelse og afslutter programmet, det er her undtagelseshåndtering kommer ind i billedet.
=> Læs C # -guiden til begyndere her
Hvad du vil lære:
- Hvad er undtagelser?
- Nøgleord til undtagelseshåndtering
- Undtagelsesklasser til stede i C #
- Undtagelse Håndtering af C #
- Konklusion
- Anbefalet læsning
Hvad er undtagelser?
Undtagelser er hidtil usete fejl, der kan forekomme inde i dit program under kørselstid. Programmører kan for det meste let registrere nogle af fejlene som validering eller nulkontrol eller mens de verificerer nogle værdier.
Men der er visse tidspunkter, hvor vi ikke kan forudse, hvad eller hvornår en fejl vises. For eksempel, Lad os sige, at jeg leder efter en fil et sted. Mit program kører helt fint, indtil filen er til stede, og hvis filen på en eller anden måde blev slettet, kaster mit program en fejl op.
Undtagelser forekommer ikke regelmæssigt, men kan stadig ske, og du vil altid gerne håndtere dem omhyggeligt. For at håndtere disse bruger vi undtagelseshåndtering.
Når der opstår en fejl, siger vi, at den smides, 'kastet' er en genstand fra System. Undtagelse klasse i C #. Det System. Undtagelse klasse tilbyder forskellige metoder og egenskaber, der giver detaljer om den fejl, som dit program lige er stødt på.
Ligesom stack-trace-egenskab, der giver den stack, som problemet opstod for, eller Message-egenskab, der giver en beskrivelse af undtagelsen.
Nøgleord til undtagelseshåndtering
Undtagelser tilbyder en proces til styring af en bestemt del af programmet, så selvom der er en undtagelse i den del, overføres programstyringen til en anden del af programmet. I C # er undtagelseshåndtering grundlæggende bygget op omkring fire nøgleord: smide, prøve, fange og endelig .
kaste
Som vi allerede har diskuteret er kast et objekt fra System. Undtagelse klasse i C #. Det giver programmet mulighed for at kaste en fejl, når det støder på en.
hvilken softwaretestcertificering er den bedste
prøve
Prøv blok omslutter blokken af koden, der kan få programmet til at kaste en undtagelse. Det efterfølges af en eller flere fangstblokke.
fangst
Når prøveblok møder en undtagelse, giver den kontrol til fangstblokken for at fange undtagelsen. Fangsblokken kan også indeholde et sæt koder, som programmet skal udføre i tilfælde af en undtagelse, eller det kan bare fange undtagelsen og ikke gøre noget afhængigt af scenariet og kravet.
langt om længe
Den sidste blok bruges til at udføre et bestemt kodestykke eller instruktion uanset forekomsten af en undtagelse. Endelig udføres blok altid, og den kan udføres lige efter den forsøgte blok, hvis programmet ikke finder nogen undtagelse, eller det kan udføres efter fangstblokken, når programmet fanger en undtagelse.
Undtagelsesklasser til stede i C #
Alle undtagelser i C # stammer direkte eller indirekte fra System. Undtagelse klasse.
Lad os se kort på nogle af de mest almindelige undtagelser:
- System.IO.IOUndtagelse: Det håndterer alle input- og outputrelaterede fejl.
- System.DividedByZeroException: Håndterer fejl kastet, når et tal divideres med nul.
- System.NullReferenceException : Håndterer enhver fejl, der kan opstå, når der henvises til et null-objekt.
- System.IndexOutOfRangeException: Håndterer fejl, der kastes, når et program forsøger at få adgang til et indeks, der er uden for rækkevidden for arrayet.
- System.OutOfMemoryException: Håndterer fejl kastet på grund af utilstrækkelig tilstedeværelse af hukommelse.
Undtagelse Håndtering af C #
C # har en meget veldefineret løsning til håndtering af enhver form for undtagelse, der måtte opstå ved hjælp af prøve-fangst-blokken. Ved hjælp af denne blok kan programmets kerneudsagn adskilles fra de andre udsagn.
Eksempel:
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(); } } }
I ovenstående eksempel har vi vedlagt vores kode til åbning af en fil under prøveblokken. Da vi ikke har angivet nogen gyldig filsti, skal koden kaste en fejl. Nu har vi fanget fejlen i vores fangstblok. Hvis filen ikke findes i den givne filsti, kaster koden en FileNotFoundException.
Denne undtagelse fanges af fangstblokken, hvor vi allerede har defineret den forventede undtagelse. Lad os forestille os, hvis vores kode kaster en anden undtagelse, bortset fra den, som vi allerede har defineret, så vil vores blok ikke være i stand til at fange den. For at fange en generel undtagelse tilføjer vi en anden fangstblok.
Lad os se på vores opdaterede kode:
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(); } } }
Denne generiske fangstblok vil være i stand til at fange alle de undtagelser, der kan kastes inde i prøveblokken. Lad os nu også tilføje en endelig blok for at fuldføre dette. For at gøre det enkelt, lad os bare udskrive en besked ved hjælp af den endelige blok.
1nf 2nf 3nf bcnf med eksempel
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(); } } }
Her har vi lige tilføjet den endelige blok med en simpel besked. Du kan også tilføje nogle brugerdefinerede udsagn i blokken. Men programmets overordnede struktur forbliver den samme som den, der vises her.
Den sidste blokering vil altid blive udført uanset om der er en undtagelse eller ej. Programmet starter fra prøveblokken og flytter derefter direkte til den endelige blok, hvis der ikke er nogen fejl / undtagelser. Hvis den støder på en undtagelse, vil den flytte for at fange først og derefter udføre den sidste blok.
Er der en betingelse, når den endelige blok ikke vil blive udført?
Som navnet antyder, udføres den sidste blok i slutningen og er den sidste blok for den kode, der vil blive udført. Endelig udføres blok altid når applikationen kører. Den eneste gang, hvor blokering endelig ikke udføres, er, når applikationen går ned eller med vilje dræbes ved hjælp af proceskommando.
Konklusion
Hvis undtagelser ikke håndteres korrekt, vil de forårsage fejl inde i dit program. Hvis du ikke har brugt prøve- / fangstblokke overalt inde i din kode, afbrydes dit program med en besked, der viser undtagelsen. For en generisk bruger vil dette være meget vanskeligt at spore fejlen tilbage til kildekoden og løse den.
Derfor er det altid en god praksis at give undtagelseshåndtering i dit program.
Prøvekode
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(); } } }
=> Se vores komplette C # træningsserie her
Anbefalet læsning
- C # Funktioner / Metoder Vejledning med kodeeksempler
- Python DateTime-tutorial med eksempler
- SVN Tutorial: Kildekodestyring ved hjælp af Subversion
- C # String Tutorial - Strengmetoder med kodeeksempler
- Undtagelseshåndtering i C ++
- Tortoise SVN Tutorial: Revisions In Code Repository
- AWS CodeBuild-vejledning: Uddrag af kode fra Maven Build
- Sådan håndteres undtagelser i SoapUI Groovy Scripts - SoapUI Tutorial # 11