← Назад к вопросам

Когда возникают ошибки в Python?

1.0 Junior🔥 211 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Когда возникают ошибки в Python?

Ошибки в Python возникают на разных этапах развития и запуска программ. Понимание их типов критично для написания надёжного кода.

Этапы возникновения ошибок

1. Синтаксические ошибки (SyntaxError)

Возникают при парсинге кода, до запуска. Python не может даже интерпретировать код с синтаксическими ошибками:

# SyntaxError — неправильный синтаксис
if x > 5
    print("x больше 5")  # Забыли двоеточие

# SyntaxError — неправильный отступ
def foo():
print("hello")  # Неправильный отступ

2. Ошибки времени выполнения (Runtime Errors)

Возникают во время исполнения программы:

# ZeroDivisionError
result = 10 / 0  # Деление на ноль

# NameError — переменная не определена
print(undefined_var)

# TypeError — неправильный тип данных
result = "5" + 5  # Нельзя конкатенировать str и int

# IndexError — индекс за границами списка
my_list = [1, 2, 3]
print(my_list[10])

# KeyError — ключ отсутствует в словаре
my_dict = {"a": 1}
print(my_dict["b"])

# AttributeError — атрибут не существует
class Dog:
    def bark(self):
        pass

dog = Dog()
dog.meow()  # У Dog нет метода meow

# ValueError — неправильное значение
int("abc")  # Невозможно преобразовать в число

3. Логические ошибки

Код работает без ошибок, но выдаёт неправильный результат:

# Функция должна находить максимум, но ошибка в логике
def find_max(numbers):
    max_value = 0  # Ошибка! Может быть отрицательное число
    for num in numbers:
        if num < max_value:  # Ошибка в условии
            max_value = num
    return max_value

print(find_max([-5, -3, -10]))  # Вернёт 0 вместо -3

Типы исключений в Python

Python использует иерархию исключений:

BaseException
├── SystemExit      # sys.exit()
├── KeyboardInterrupt  # Ctrl+C
└── Exception        # Все остальные ошибки
    ├── StopIteration
    ├── ArithmeticError (ZeroDivisionError, OverflowError)
    ├── LookupError (IndexError, KeyError)
    ├── TypeError
    ├── ValueError
    ├── NameError
    ├── AttributeError
    ├── RuntimeError
    └── ... другие

Как обрабатывать ошибки

# Try-except блок перехватывает ошибки
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Ошибка: деление на ноль")
except Exception as e:
    print(f"Неизвестная ошибка: {e}")
finally:
    print("Этот блок выполнится в любом случае")

# Можно проверить тип ошибки
try:
    value = int("not_a_number")
except ValueError as e:
    print(f"Не удалось преобразовать в число: {e}")

# Генерирование исключений
def divide(a, b):
    if b == 0:
        raise ValueError("Делитель не может быть нулём")
    return a / b

Резюме

Ошибки возникают на трёх уровнях:

  • Синтаксические ошибки — парсинг кода (до запуска)
  • Ошибки времени выполнения — неправильные операции (во время запуска)
  • Логические ошибки — неправильная бизнес-логика (программа работает, но неправильно)

Профессиональный разработчик использует try-except для обработки ошибок и понимает иерархию исключений для правильной обработки.