Виключення в Python. Обробка винятків (помилок) або виключень в Python необхідна для того, щоб програма продовжувала свою роботу після коректного виведення повідомлення про помилку (при необхідності можна таке повідомлення і не виводити, але обробити повідомлення потрібно, щоб код продовжував виконуватися).
Якщо виняток, не обробити, Python виведе системну помилку і виконання програми після помилки зупиниться.
Необхідно реалізувати повернення до подальшого коду в блоці try після обробки в ньому виключення в Python.
Повернення до коду в try після обробки в ньому виключення в Python
Завдання: повернення до поточного кроку циклу (або просто до коду) в блоці try після обробки в ньому винятку.
Прості приклади для обробки винятку описуємо стовпчиком в блоці try. Для пошуку і обробки помилок (наприклад, ділення на нуль) в блоці except прописуємо обробку даного виключення (помилки). Але за правилами обробки блоку try-except після обробки виключення програма вийде з цього блоку і продовжиться далі. З цієї причини код, який знаходиться в блоці try-except після виключення розглядатись не буде.
Після довгих спроб вийшло вирішити завдання найпростішим шляхом, але, швидше за все, воно неправильне, тому що вийшов дуже великий код з повторюваними блоками try-except. Подивимося це на прикладі простого калькулятора, де обчислення простих арифметичних задач має продовжитися навіть після обробки виключення поділу на нуль.
class MyException:
a=15
b=0
c=5
d=10
try:
print(a+b+c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a-b-c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a/c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a/b)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a+b+c+d)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a-b-c-d)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
Є ще один можливий варіант вирішення даної задачі.
Повернення до циклу після обробки в ньому винятку
За допомогою циклу можна також обробити виключення таким чином, що код в блоці try після виведення помилки продовжить своє виконання і програма не вийде з блоку try-except, як це відбувається зазвичай.
Приклад простий — все той же калькулятор. Спочатку прописуємо змінні, з якими буде працювати і вирішувати найпростіші арифметичні дії. Потім в створеному класі необхідно визначити метод, в якому прописуємо кожному арифметичному прикладі змінну зі значенням від 1 до 6. Створюємо екземпляр класу, як зазвичай. Потім прописуємо цикл (ітератор) за допомогою конструктора циклу for і не забуваємо обробити виняток (поділ на нуль).
a=15, b=0, d=10, c=5, z=0
class MyException:
def vozvrat(self,oper):
if oper == 1:
z = a+b+c
elif oper == 2:
z = a-b-c
elif oper == 3:
z = a/c
elif oper == 4:
z = a/b
elif oper == 5:
z = a+b+c+d
elif oper == 6:
z = a-b-c-d
else:
z = 255
return z
test=MyException()
for i in range(1,7):
try:
z = test.vozvrat(i)
print(i,' = ',z)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
Повернення до циклу після обробки виключення
Аналогічно також можна вирішити дану задачу з циклом while. На прикладі нижче все ясно, аналогічно коду вище. В даному випадку цикл працює до тих пір, поки змінна i менше 6, після кожного проходу до змінної додається одиниця.
a=15
b=0
d=10
c=5
z=0
class MyException:
def vozvrat(self,oper):
if oper == 1:
z = a+b+c
elif oper == 2:
z = a-b-c
elif oper == 3:
z = a/c
elif oper == 4:
z = a/b
elif oper == 5:
z = a+b+c+d
elif oper == 6:
z = a-b-c-d
else:
z = 255
return z
test=MyException()
i=0
while i<6:
try:
i = i + 1
z = test.vozvrat(i)
print(i,' = ',z)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
