c exception handling tutorial with code examples
Руковање изузецима је метода за руковање грешкама које се могу догодити током извршавања програма. Овај водич објашњава руковање изузецима у Ц # са примерима кода:
примери уређаја за интернет ствари
Руковање изузецима користи се да би се осигурало да се ток програма настави чак и ако постоји грешка у извођењу. Изузетак су објекти који се бацају приликом наилажења на било какву грешку у извођењу.
Ако се изузеци не обраде, тада ће Ц # произвести поруку о изузећу и прекинути програм, овде се обрађује изузетак.
=> Овде прочитајте водич за почетнике Ц #
Шта ћете научити:
- Који су изузеци?
- Кључне речи за руковање изузецима
- Изузетне класе присутне у Ц #
- Руковање изузецима у Ц #
- Закључак
- Препоручено читање
Који су изузеци?
Изузетак су грешке без преседана које се могу појавити унутар вашег програма током извођења. Програмери у већини времена могу лако да открију неке грешке као што су валидација или провера нуле или док верификују неке вредности.
Али постоје одређена времена када не можемо да предвидимо шта или када ће се појавити грешка. На пример, рецимо да тражим датотеку на локацији. Мој програм ће се извршавати савршено док датотека не буде присутна и ако се датотека некако избрише, мој програм ће избацити грешку.
Изузеци се не јављају редовно, али се и даље могу догодити и увек ћете желети да пажљиво поступите са њима. За руковање њима користимо руковање изузетцима.
Кад год се догоди грешка, кажемо да је бачена, „бачен“ је објекат из Систем.Екцептион час у Ц #. Тхе Систем.Екцептион класа нуди различите методе и својства која дају детаље о грешци коју је ваш програм управо наишао.
Попут својства праћења стека које пружа стек за који се појавио проблем или својства поруке које пружа опис изузетка.
Кључне речи за руковање изузецима
Изузеци нуде поступак за контролу одређеног дела програма, тако да чак и ако у том делу постоји изузетак, тада се контрола програма преноси у други део програма. У Ц # руковање изузецима се у основи гради око четири кључне речи: баци, пробај, ухвати и коначно .
бацити
Као што смо већ разговарали, бацање је предмет из Систем.Екцептион класе у Ц #. Омогућава програму да баци грешку кад год је наиђе.
покушати
Блок „Покушај“ затвара блок кода због којег програм може да изузме изузетак. Следи један или више блокова улова.
улов
Када покушај блока наиђе на изузетак, пружа контролу блоку цатцх да ухвати изузетак. Блок цатцх такође може садржати скуп кодова које програм треба да изврши у случају изузетка или може једноставно ухватити изузетак и не радити ништа у зависности од сценарија и захтева.
коначно
Завршни блок се користи за извршавање одређеног исечка кода или упутства, без обзира на појаву изузетка. Коначно, блок се увек извршава и може се извршити одмах након блока који покушава, ако програм не пронађе ниједан изузетак или се може извршити након блока цатцх када програм ухвати изузетак.
Изузетне класе присутне у Ц #
Сви изузеци у Ц # потичу директно или индиректно из Систем.Екцептион класа.
Кратко ћемо погледати неке од најчешћих изузетака:
Питања и одговори за разговоре за програмере пл скл
- Систем.ИО.ИОЕкцептион: Обрађује све грешке повезане са улазом и излазом.
- Систем.ДивидедБиЗероЕкцептион: Обрађује грешку бачену када је број подељен са нулом.
- Систем.НуллРеференцеЕкцептион : Обрађује сваку грешку која се може појавити када се референцира нулти објекат.
- Систем.ИндекОутОфРангеЕкцептион: Обрађује грешку бачену када програм покушава да приступи индексу који је изван домета низа.
- Систем.ОутОфМемориЕкцептион: Обрађује грешку бачену због недовољног присуства меморије.
Руковање изузецима у Ц #
Ц # има врло добро дефинисано решење за руковање било којом врстом изузетака који могу настати коришћењем блока три анд цатцх. Користећи овај блок, језгро програма може се одвојити од осталих израза.
Пример:
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(); } } }
У, горњем примеру, приложили смо наш код за отварање датотеке под блоком три. Како нисмо навели ниједну ваљану путању до датотеке, код би требао да изазове грешку. Сада смо ухватили грешку у нашем блоку цатцх. Ако датотека не постоји у датој путањи датотеке, тада ће код избацити ФилеНотФоундЕкцептион.
Овај изузетак ухватиће блок цатцх где смо већ дефинисали очекивани изузетак. Замислимо сада ако наш код баци неки други изузетак, осим оног који смо већ дефинисали, тада наш блок неће моћи да га ухвати. Да бисмо ухватили било који генерички изузетак, додаћемо још један блок цатцх.
Погледајмо наш ажурирани код:
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(); } } }
Овај генерички блок цатцх ће моћи да ухвати све изузетке који се могу убацити у блок три. Сад ћемо додати и коначно блок да ово довршимо. Да бисмо то поједноставили, само одштампајмо поруку помоћу блока коначно.
која је разлика између јаве и ц ++
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(); } } }
Ево, управо смо додали коначно блок једноставном поруком. У блок можете да додате и неке прилагођене изјаве. Али укупна структура програма остаће слична оној која је овде приказана.
Блок На крају ће се увек извршити без обзира да ли постоји изузетак или не. Програм ће започети од покушај блока, а затим ће се пребацити директно на блок коначно ако нема грешака / изузетака. Ако наиђе на изузетак, прво ће се померити да ухвати, а затим ће извршити завршни блок.
Да ли постоји услов када се коначно блок неће извршити?
Као што и само име говори, завршни блок се извршава на крају и представља завршни блок кода који ће се извршити. Коначно, блок ће се увек извршити када је апликација покренута. Једино када се коначно блок неће извршити је када се апликација сруши или намерно убије помоћу команде процеса.
Закључак
Ако се са изузецима не поступи правилно, они ће проузроковати грешке у вашем програму. Ако нигде у коду нисте користили блокове три / цатцх, програм ће прекинути са поруком која приказује изузетак. Генеричком кориснику ће бити веома тешко да грешку врати до изворног кода и да је реши.
Стога је увек добра пракса пружити руковање изузецима у свом програму.
Узорак кода
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(); } } }
=> Погледајте нашу комплетну серију обука за Ц # овде
Препоручено читање
- Водич за функције # методе и методе са примерима кода
- Водич за Питхон ДатеТиме са примерима
- Водич за СВН: Управљање изворним кодом помоћу Субверзије
- Водич за Ц # низ - Методе низања са примерима кода
- Руковање изузецима у Ц ++
- Водич за корњаче СВН: Ревизије у спремишту кода
- АВС ЦодеБуилд Туториал: Издвајање кода из Мавен Буилд-а
- Како се рукује изузетком у СоапУИ Гроови скриптама - Водич за СоапУИ бр. 11