В чем разница между ошибкой и исключением в Python

Ответ

В контексте Python, ошибки — это, как правило, фатальные проблемы, которые не предназначены для обработки в коде (например, синтаксические). Исключения — это события, возникающие во время выполнения, которые можно и нужно обрабатывать.

Все исключения являются наследниками базового класса BaseException.

Ошибки (Errors)

Чаще всего под ошибками понимают те, что не наследуются от класса Exception. Они сигнализируют о серьезных проблемах, которые программа обычно не может исправить.

  • SyntaxError: Нарушение синтаксиса языка. Код не может быть даже скомпилирован в байт-код.
  • IndentationError: Частный случай SyntaxError, связанный с неверными отступами.

Эти ошибки нужно исправлять в исходном коде, их нельзя обработать с помощью try...except.

# SyntaxError: код не запустится
def my_function()
    print("Hello, world!")

Исключения (Exceptions)

Это ошибки, которые возникают во время выполнения (runtime) синтаксически корректной программы. Их можно перехватить и обработать, чтобы предотвратить аварийное завершение программы.

  • ZeroDivisionError: Деление на ноль.
  • TypeError: Операция применена к объекту неподходящего типа.
  • KeyError: Обращение к несуществующему ключу в словаре.
# Обработка исключения ZeroDivisionError
try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"Произошла ошибка: {e}. Деление на ноль недопустимо.")
    result = 0

print(f"Результат: {result}") # Программа продолжит работу

Ключевое различие: синтаксические ошибки препятствуют запуску программы, а исключения возникают в процессе ее работы и могут быть обработаны для обеспечения стабильности.