Hazlarorn
@Hazlarorn

Чем ошибки отличаться от исключений?

Чем ошибки отличаться от исключений?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Насколько я понимаю, ошибками в питоне считаются фатальные ошибки, исключениями - все остальные.
Плюс исключения можно бросать самому.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
mayton2019
@mayton2019
Bigdata Engineer
Обычно ошибки - это некое детерминированное поведение когда например в С++ функция fopen возрващает файловый хендл. И если проверка этого указателя на NULL - положительна значит была ошибка. И программист сам вручную принимает решение что делать.

Исключения - это некоторое свойство блока кода в котором может произойти "нечто" и мы на своём уровне не желаем отрабатывать каждую ошибку каждой функции а определяем некий общий обработчик всех ошибок одного типа.

Если не обрабатываем - то считается что делегируем обработку исключения той функции которая нас вызвала. По сути передаем управление "наверх". Тоесть кто вызвал - тот и обязан разруливать ситуацию. Очень похожий подход принят в акторной технологии.

Обычно механика исключений хорошо приживается в языках с Garbage Collectors.

Поэтому, подытоживая - да. Ошибки не равны исключениям. Исключения - это более высокоуровневый мехнизм.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Типичный случай в консоли человек вводит строку вместо числа, это ошибка.
Не пришли данные с яндекс карт или прилетел 500 код. Это исключение.
То есть ошибка прогнозируема а вот исключение божья воля
Ответ написан
aRegius
@aRegius
Python Enthusiast
There are (at least) two distinguishable kinds of errors: syntax errors and exceptions.
Errors detected during execution are called exceptions ...
docs
Ответ написан
Комментировать
drygdryg
@drygdryg
Python-разработчик
Объяснение из книги "Python 3 и PyQt 5. Разработка приложений":
Исключения — это извещения интерпретатора, возбуждаемые в случае возникновения ошибки в программном коде или при наступлении какого-либо события. Если в коде не предусмотрена обработка исключения, выполнение программы прерывается, и выводится сообщение об ошибке. Существует три типа ошибок в программе:
- синтаксические — это ошибки в имени оператора или функции, отсутствие закрывающей или открывающей кавычек и т.д. — т.е. ошибки в синтаксисе языка. Как правило, интерпретатор предупредит о наличии ошибки, а программа не будет выполняться совсем. Пример синтаксической ошибки:
>>> print("Нет закрывающей кавычки!)
SyntaxError: EOL while scanning string literal

- логические — это ошибки в логике программы, которые можно выявить только по результатам её работы. Как правило, интерпретатор не предупреждает о наличии такой ошибки, и программы будет успешно выполняться, но результат её выполнения окажется не тем, на который мы рассчитывали. Выявить и исправить такие ошибки весьма трудно;
- ошибки времени выполнения — это ошибки, которые возникают во время работы программы. Причиной являются события, не предусмотренные программистом. Классическим примером служит деление на ноль:
>>> def test(x, y): return x / y
>>> test(4, 2)  # Нормально
2.0
>>> test(4, 0)  # Ошибка
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    test(4, 0)
  File "<pyshell#2>", line 1 in test
    def test(x, y): return x / y
ZeroDivisionError: division by zero

Необходимо заметить, что в Python исключения возбуждаются не только при возникновении ошибки, но и как уведомление о наступлении каких-либо событий. Например, метод index() возбуждает исключение ValueError, если искомый фрагмент не входит в строку:
>>> "Строка".index("текст")
Traceback (most recent call last):
  File "<pyshell#5>", line 1 , in <module>
    "Строка".index("текст")
ValueError: substring not found

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы