# 000139. Блочные конструкции. Исключения

Блочные конструкции. Исключения||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Всем привет! С Вами wmysterio. В этом уроке мы поговорим об ещё одной блочной конструкции - операторах исключения. В этой конструкции идёт попытка выполнения некого кода, и если этот код имеет логическую ошибку, то будет выполнятся другой код. Общая конструкция выглядит следующим образом:

| <p>try {<br>// В начале идёт попытка выполнить этот код<br>} catch {<br>// Если попытка не удалась, то обрабатываем исключение в этом коде<br>}<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- |

В качестве примера, давайте напишем код, где явно можно получить ошибку - деление на ноль. Давайте создадим статическую функцию деления и коде программы укажем параметр ноль.

| <p>    class Program {<br>        static void Main() {<br>            int a = 5;<br>            int c = del(a, 0);<br>            Console.ReadKey();<br>        }<br><br>        public static int del( int start, int val ) {<br>            return start /= val;<br>        }   <br>    }<br></p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

После запуска мы получим окно о ошибке:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/s16690776.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/16690776.png)\
\
Если запустить готовый exe-шник, то программа в лучшем случаи завершится с ошибкой. Как вы уже догадались, чтобы избежать подобной ошибки требуется написать обработчик исключения под данную ошибку. Для этого и существует блок **ПОПЫТКА .. ИСКЛЮЧЕНИЕ**(try .. catch), который мы сейчас внедрим в нашу программу:

| <p>        public static int del( int start, int val ) {<br>            try {<br>                return start /= val;<br>            } catch {<br>                Console.WriteLine("Невозможно делить на ноль!");<br>                return -1;<br>            }<br>        }<br></p> |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

После запуска программы, мы увидим в окне следующее:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/35656732.png)\
\
И программа работает адекватно без вылетов и конструктивно объяснили пользователю причину остановки программы.\
\
Давайте переделаем код, чтобы пользователь вводил 2 числа с клавиатуры и нам выводилась их сумма. В предыдущих уроках мы делали подобный пример, теперь пора добавить обработчик исключения! Создадим процедуру, которая выведет на экран сумму:

| <p>        public static void del( string Va1, string Va2 ) {<br>            try {<br>                int a = int.Parse( Va1 );<br>                int b = int.Parse( Va2 );<br>                Console.WriteLine("{0}", a /= b);<br>            } catch {<br>                Console.WriteLine("Невозможно выполнить данное действие!");<br>            }<br>        }<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

и саму программу:

| <p>        static void Main() {<br>            Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );<br>            del( Console.ReadLine(), Console.ReadLine() );<br>            Console.ReadKey();<br>        }<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Тестируем нашу программу:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/13659736.png)\
\
Отсюда можно сделать вывод: Если возникает хотя-бы одна ошибка в блоке try, будет выполнены команды в catch. Это обезопасит программу от невнимательности пользователя и от "форс-мажор"-а. Есть так-же необязательный оператор finally, который связан с блоком попытки. там выполняются команды, которые выполняются сразу-же после обработки исключений. В наше примере можно переработать процедуру вот так:

| <p>            try {<br>                int a = int.Parse( Va1 );<br>                int b = int.Parse( Va2 );<br>                Console.WriteLine( "{0}", a /= b );<br>            } catch {<br>                Console.WriteLine( "Невозможно выполнить данное действие!" );<br>            } finally {<br>                Console.ReadKey();<br>            }<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

А наш код будет выглядеть следующим образом:Кодusing System;\
\
namespace Consol {\
&#x20;   class Program {\
\
&#x20;       static void Main() {\
&#x20;           Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );\
&#x20;           del( Console.ReadLine(), Console.ReadLine() );\
&#x20;       }\
\
&#x20;       public static void del( string Va1, string Va2 ) {\
&#x20;           try {\
&#x20;               int a = int.Parse( Va1 );\
&#x20;               int b = int.Parse( Va2 );\
&#x20;               Console.WriteLine( "{0}", a /= b );\
&#x20;           } catch {\
&#x20;               Console.WriteLine( "Невозможно выполнить данное действие!" );\
&#x20;           } finally {\
&#x20;               Console.ReadKey();\
&#x20;           }\
&#x20;       }\
&#x20;  \
&#x20;   }\
}Что-же, надеюсь вы поймёте для чего нужно обрабатывать исключения ![smile](http://s49.ucoz.net/sm/15/smile.gif)|732|1|0|16690776`png`793`275`400`138\|35656732`png`256`107|13659736`png`338\`406||blochnye\_konstrukcii\_iskljuchenija|1392798616
