Днес ще си дадем почивка от структурите на данни и ще говорим за изключения. Тази статия има за цел да ви покаже какво е изключение, какво го причинява и как да се справите с него. В следващите редове ще видим заедно основната структура на блок try…except в Python с някои от неговите вариации. Имаме много работа, така че да започваме.

Въведение

Всички сме срещали ситуации, в които програмите ни блокират поради грешка. Това е така, защото всеки път, когато възникне грешка, Python автоматично спира да изпълнява програмата. Най-общо казано, в Python има два типа грешки, синтактични грешки и изключения.

В тази статия ще говорим за последната категория. Първо, какво е изключение? Изключение в Python е друг обект, който представлява грешка и нарушава нормалното изпълнение на програмата. Изключения могат да възникнат във фазата на разработка, както и във фазата на производство.

Например, ако имате приложение, което преобразува температурата от градуси по Целзий в градуси по Фаренхайт и потребител вместо да вмъкне число, вмъкне знак, това ще предизвика изключение (ако нямате механизъм за валидиране).

опитайте ... освен

За да предотвратим тези неудобни ситуации, трябва да използваме блока try…except, за да обработваме правилно тези изключения. Този блок има следната форма:

По този начин кодът вътре в блока try се изпълнява. Ако възникне грешка, тогава Python ще предизвика изключение и изпълнението на кода в блока try ще бъде автоматично спряно. Контролът на програмата ще премине в блока except, където можем да обработим изключението, предотвратяващо насилственото прекъсване на програмата. Да видим пример:

Както можем да видим в кода по-горе, имаме функция, която приема две стойности и ги разделя. Вместо да вмъкваме две числа, ние вмъкваме едно число и един знак, карайки Python да предизвика изключение и да наруши изпълнението на нашата програма. Използвайки вместо това блок try…except, можем да се справим с това изключение.

Виждаме, че използвайки блока try…except, можем да обработваме правилно изключенията. Един код обаче може да предизвика повече от едно изключение и вероятно искаме да обработваме всяко от тях по различен начин. Python има куп вградени изключения, които можем да използваме. Можете да ги видите тук.

Например, в нашата програма да предположим, че вмъкваме нула като второ число. Следователно ще бъде повдигнато изключение, тъй като не можем да изпълним деление на нула. В този случай искаме да обработим това конкретно изключение по различен начин, вероятно с друг предупредителен текст. Да видим как ще го управляваме:

Както можете да видите в кода по-горе, можем да имаме повече от един освенблок. Така можем да обработваме правилно различни изключения. Общо правило е първо да се използват по-специфичните изключения и накрая по-общите.

опитайте...освен...друго

Блокът try…except може също да има оператор else. В блока else можем да добавим код, който ще бъде изпълнен ако и само ако не се генерират грешки (изключения).

В горния пример, ако нямаме грешки, блокът else ще върне резултата от разделянето.

опитайте ... освен ... накрая

Блокът try…except може също да има блок finally. Кодът в този блок ще бъде изпълнен независимо от това дали блокът try предизвиква изключение или не. На този етап трябва да спомена, че можем да използваме както else, така и finallyblock, така че структурата ще бъде следната:

Създайте изключение

В Python можем сами да хвърлим изключение, ако е необходимо. За да направим това, можем да използваме ключовата дума raise. Освен това можем да определим не само вида на изключението, но и съобщението, което ще се показва на потребителя. Нека видим кода по-долу:

В кода по-горе, в блока try, ние проверяваме дали някое от числата е низ, така че в този случай ние повдигамеизключение от тип TypeErrorи ние също дефинираме съобщението до потребителя. След това в първия блок except отпечатваме съобщението, използвайки параметъра e. В резултат на това получаваме съобщението, което сме дефинирали.

Потребителски изключения

В допълнение към вградените в Python изключения, можем да създадем наши изключения. За да направим това, създаваме клас, който наследява от класа Exception. След това можем да дефинираме съобщението и всеки друг параметър, който желаем. В следващия пример създаваме изключение, което ще бъде повдигнато, ако дадената стойност не е кратна на 5.

Заключение

Днес говорихме за обработка на грешки (изключения) с помощта на блока try…except. Обработката на грешки е необходима в случаите, когато позволяваме на потребителя да въвежда стойности в нашата програма. Трябва да сме сигурни, че нашата програма ще продължи да се изпълнява правилно при всяка ситуация и потребителско въвеждане. В противен случай нашето приложение ще бъде изключително уязвимо, което ще има силен ефект върху потребителското изживяване и данните.

Това е всичко за днес. Надявам се, че имате основно разбиране за изключенията и как можем да се справим с тях. До следващия път продължавайте да учите и продължавайте да кодирате. Благодаря за четенето.

Повече съдържание в plainenglish.io