Почему исключения Python называются «Ошибка»? - PullRequest
63 голосов
/ 25 мая 2010

Почему исключения Python называются «Ошибка» (например, ZeroDivisionError, NameError, TypeError) а не «Исключение» (например, ZeroDivisionException, NameException, TypeException).

Я пришел из Java и недавно начал изучать Python, поэтому это сбивает с толку, потому что в Java существует различие между ошибками и исключениями.

Есть ли разница в Python или нет?

Ответы [ 6 ]

76 голосов
/ 25 мая 2010
  1. Вы не называете каждый класс именем 'Class' в имени и каждой переменной с именем '_variable'. То же имя вы не называете исключение, используя слово «Exception». Название должно рассказать что-то о значении объекта. «Ошибка» - это значение большинства исключений.

  2. Не все исключения являются ошибками. SystemExit, KeyboardInterrupt, StopIteration, GeneratorExit - все это исключения, а не ошибки. Слово «Ошибка» в фактических ошибках показывает разницу.

  3. «Ошибка» короче, чем «Исключение». Чем можно сохранить несколько символов в ширину кода без потери значения. Это имеет некоторое значение.

43 голосов
/ 25 мая 2010

Я считаю, что это соглашение взято из PEP 8 - Руководство по стилю для кода Python :

Имена исключений

Поскольку исключения должны быть классами, именование классовКонвенция применяется здесь.Однако вы должны использовать суффикс «Ошибка» в именах исключений (если исключение действительно является ошибкой).

8 голосов
/ 25 мая 2010

Python довольно похож на Java в этом отношении. Но исключение Python следует сравнить с Java Throwable.

Поскольку Throwables доступны во всех видах - Error, RuntimeException и (проверено) Exception - то же самое можно сказать и о Python (хотя нет проверенных исключений).

Что касается языка, ошибка является исключительной, поэтому иерархия наследования не является странной.

Мне не особо нравится название Exception. Исключения используются не только для исключительных обстоятельств (например, ошибок), но и просто для выхода из потока управления. Потому что это то, что делает Исключение; он выпрыгивает из нормального потока управления в отмеченную точку. Немного похоже на гото, но более утонченно.

Тем не менее, каждый раз, когда у вас возникает ситуация, когда подходящее возвращаемое значение не может быть найдено, вы склонны использовать исключение. И в Python, и в Java.

4 голосов
/ 10 марта 2015

Q.Почему исключения Python называются «Ошибка»?

Я предполагаю, что это потому, что большинство Исключения Python классифицируются как ошибки или предупреждения .Если имена исключений Python заканчиваются на Exception, это различие будет невозможно.

Примеры предупреждений DeprecationWarning и ImportWarning.

Пожалуйста, см. иерархия классов 2.x для встроенных исключений , а также для 3.x .

1 голос
/ 30 ноября 2018

Проще говоря:

  • Исключения Python НЕ называются "Ошибка".
  • Ошибки Python называются «Ошибка».
  • Ошибки Python могут возникать, перехватываться и обрабатываться как исключения.
  • То, что начинается с ошибки, может в конечном итоге быть обработанным исключением, которое не приводит к сообщению об ошибке.
  • Exception также может быть поднят напрямую

Концепция:

Обычно я делаю это, но собираюсь сделать исключение

OR

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

подробности:

Исключения и ошибки:

https://docs.python.org/2/tutorial/errors.html

Ошибки, обнаруженные во время выполнения, называются исключениями и не являются безусловно, фатальный

Workflow:

  • Программа отслеживает ошибки.
  • Если ошибка возникает, но НЕ обнаруживается программой во время выполнения, это приводит к сообщению об ошибке.
  • Если ошибка возникает и обнаруживается программой во время выполнения, это исключение.
  • Исключения могут обрабатываться программой. Они могут быть обработаны изящно или привести к сообщению об ошибке.
  • Исключениями, которые НЕ обрабатываются программой, являются необработанные ( uncaught ) исключения, которые становятся сообщениями об ошибках.
1 голос
/ 25 мая 2010

Это просто наименование. В Java у вас есть java.lang.Error, отличный от других Throwable с, потому что такого рода ошибки должны быть непроверены. В Python все исключения не проверяются, поэтому это различие бессмысленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...