-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path20_exceptions_tutorial.py
More file actions
52 lines (45 loc) · 2.27 KB
/
20_exceptions_tutorial.py
File metadata and controls
52 lines (45 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def divide_numbers(a, b):
try:
# Пытаемся выполнить операцию
result = a / b
except ZeroDivisionError:
# Обработка конкретной ошибки: деление на ноль
return "Ошибка: Нельзя делить на ноль!"
except TypeError:
# Обработка другой ошибки: неверный тип данных
return "Ошибка: Нужно вводить только числа!"
except Exception as e:
# Перехват любых других непредвиденных ошибок
return f"Произошла непредвиденная ошибка: {e}"
else:
# Выполняется, если в блоке try не возникло исключений
return f"Результат: {result}"
finally:
# Выполняется ВСЕГДА (удобно для закрытия файлов или соединений)
print("Завершение операции деления.")
# Примеры вызова
print(divide_numbers(10, 2)) # Успех
print(divide_numbers(10, 0)) # ZeroDivisionError
print(divide_numbers(10, "2")) # TypeError
print("-" * 20)
# Как обрабатывать несколько ошибок в одном блоке
def multi_catch_example(value):
try:
# Допустим, мы пытаемся преобразовать в int и поделить
res = 100 / int(value)
print(f"Результат: {res}")
except (ValueError, ZeroDivisionError) as e:
# Перехватываем либо ошибку значения, либо деление на ноль
print(f"Входные данные '{value}' вызвали ошибку: {e}")
multi_catch_example("abc") # ValueError
multi_catch_example("0") # ZeroDivisionError
print("-" * 20)
# Пример с поднятием (raise) собственной ошибки
def check_age(age):
if age < 0:
raise ValueError("Возраст не может быть отрицательным!")
return f"Возраст принят: {age}"
try:
print(check_age(-5))
except ValueError as e:
print(f"Поймали исключение: {e}")