Привет! В прошлых статьях мы научились перехватывать ошибки. Но чтобы правильно их обрабатывать, нужно знать, какие ошибки вообще могут возникнуть. В Python есть множество встроенных исключений, и каждое из них говорит о конкретной проблеме.
В этой статье мы разберём:
- Основные типы исключений
- Как они возникают
- Как их правильно обрабатывать
- Что нужно знать перед началом
- Основная часть
- ValueError — неправильное значение
- TypeError — несовместимые типы
- KeyError — ключ отсутствует
- IndexError — выход за границы
- NameError — неопределённая переменная
- AttributeError — нет атрибута или метода
- ZeroDivisionError — деление на ноль
- FileNotFoundError — файл не найден
- Иерархия исключений
- Примеры из реальной жизни
- Задачи для закрепления
- Нюансы и подводные камни
- Обработка ошибок в правильном порядке
- Перехват всех исключений через Exception
- Ошибки в блоке except
- Частые ошибки и как их избежать
- Ошибка 1: Путаница между KeyError и IndexError
- Ошибка 2: Обработка ошибок без понимания
- Ошибка 3: Игнорирование ошибок
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание исключений (статьи 1–2 в этом подменю)
Совет: Знание типов исключений помогает быстрее находить и исправлять ошибки.
Основная часть
ValueError — неправильное значение
Возникает, когда функция получает аргумент правильного типа, но с недопустимым значением.
# Преобразование строки в число
try:
number = int("abc")
except ValueError:
print("Невозможно преобразовать в число")
# Поиск отсутствующего элемента (в списке)
try:
fruits = ["яблоко", "банан"]
fruits.index("вишня")
except ValueError:
print("Элемент не найден")TypeError — несовместимые типы
Возникает, когда операция применяется к объекту неподходящего типа.
# Сложение числа и строки
try:
result = 5 + "10"
except TypeError:
print("Нельзя складывать число и строку")
# Вызов несуществующего метода
try:
x = 5
x.append(10)
except TypeError:
print("У int нет метода append")KeyError — ключ отсутствует
Возникает при обращении к несуществующему ключу словаря.
user = {"name": "Анна", "age": 25}
try:
city = user["city"]
except KeyError:
print("Ключ 'city' отсутствует в словаре")Как избежать:
city = user.get("city") # Вернёт None
city = user.get("city", "Не указан") # Вернёт "Не указан"IndexError — выход за границы
Возникает при обращении к несуществующему индексу списка.
fruits = ["яблоко", "банан"]
try:
item = fruits[5]
except IndexError:
print("Индекс выходит за границы списка")Как избежать:
if len(fruits) > 5:
print(fruits[5])
else:
print("Индекс вне диапазона")NameError — неопределённая переменная
Возникает при использовании переменной, которая не была определена.
try:
print(age) # age не определена
except NameError:
print("Переменная 'age' не определена")AttributeError — нет атрибута или метода
Возникает при обращении к несуществующему атрибуту или методу.
number = 5
try:
number.upper() # У int нет метода upper()
except AttributeError:
print("У int нет метода upper")ZeroDivisionError — деление на ноль
Возникает при делении на ноль.
try:
result = 10 / 0
except ZeroDivisionError:
print("Ошибка: деление на ноль")FileNotFoundError — файл не найден
Возникает при открытии несуществующего файла.
try:
with open("nonexistent.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("Файл не найден")Иерархия исключений
BaseException
├── SystemExit
├── KeyboardInterrupt
├── Exception
│ ├── ValueError
│ ├── TypeError
│ ├── KeyError
│ ├── IndexError
│ ├── NameError
│ ├── AttributeError
│ ├── ZeroDivisionError
│ ├── FileNotFoundError
│ └── ... (многие другие)
└── ...Важно: Все исключения — наследники
Exception. Это позволяет перехватывать все ошибки черезexcept Exception:.
Примеры из реальной жизни
Пример 1. Обработка ввода пользователя:
def get_user_info():
user = {}
try:
user["name"] = input("Имя: ")
user["age"] = int(input("Возраст: "))
return user
except ValueError:
print("Ошибка: возраст должен быть числом")
return None
user = get_user_info()
print(user)Пример 2. Работа со словарём:
def get_user_city(user):
try:
return user["city"]
except KeyError:
return "Не указан"Задачи для закрепления
Задача 1. Напиши программу, которая преобразует строку в число и обрабатывает ValueError.
Задача 2. Напиши программу, которая обращается к словарю по ключу и обрабатывает KeyError.
Задача 3. Напиши программу, которая обращается к элементу списка по индексу и обрабатывает IndexError.
Задача 4. Какое исключение возникает при делении на ноль?
Задача 5. Какое исключение возникает при сложении числа и строки?
Ответы:
Задача 1.
def to_int(value):
try:
return int(value)
except ValueError:
return NoneЗадача 2.
def get_value(d, key):
try:
return d[key]
except KeyError:
return NoneЗадача 3.
def get_item(lst, index):
try:
return lst[index]
except IndexError:
return NoneЗадача 4.
ZeroDivisionErrorЗадача 5.
TypeErrorНюансы и подводные камни
Обработка ошибок в правильном порядке
try:
value = int(input())
result = 10 / value
except ValueError:
print("Ошибка Value")
except ZeroDivisionError:
print("Ошибка Zero")
# ValueError и ZeroDivisionError не перехватываются ExceptionПерехват всех исключений через Exception
try:
value = int(input())
except Exception as e:
print(f"Произошла ошибка: {e}")Ошибки в блоке except
try:
value = int(input())
except ValueError:
result = 10 / 0 # Ошибка не обрабатываетсяЧастые ошибки и как их избежать
Ошибка 1: Путаница между KeyError и IndexError
KeyError— для словарейIndexError— для списков
Ошибка 2: Обработка ошибок без понимания
Всегда знай, что именно ты обрабатываешь.
Ошибка 3: Игнорирование ошибок
Всегда выводи сообщение или логируй ошибку.
Шпаргалка
| Исключение | Когда возникает |
|---|---|
ValueError | Неправильное значение |
TypeError | Неправильный тип |
KeyError | Отсутствует ключ в словаре |
IndexError | Выход за границы списка |
NameError | Переменная не определена |
AttributeError | Нет атрибута/метода |
ZeroDivisionError | Деление на ноль |
FileNotFoundError | Файл не найден |
Заключение / Выводы
Сегодня мы узнали:
- Основные типы исключений
- Как и когда они возникают
- Как их правильно обрабатывать
- Иерархию исключений






