# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000139.-blochnye-konstrukcii.-isklyucheniya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
