Python 예외가 "오류"로 명명 된 이유는 무엇입니까?


82

파이썬 예외 "오류"(예 : 명명 된 이유는 ZeroDivisionError, NameError, TypeError)가 아닌 "예외"(예를 들어 ZeroDivisionException, NameException, TypeException).

저는 Java 배경에서 왔으며 최근에 Python을 배우기 시작했습니다. Java에서는 오류와 예외가 구별되기 때문에 혼란 스럽습니다.

파이썬에도 차이가 있습니까?

답변:


95
  1. 이름에 'Class'를 사용하고 각 변수에 '_variable'을 사용하여 각 클래스의 이름을 지정하지 않습니다. '예외'라는 단어를 사용하여 예외 이름을 지정하지 않는 것과 같은 방식입니다. 이름은 대상의 의미에 대해 말해야합니다. '오류'는 대부분의 예외의 의미입니다.

  2. 모든 예외가 오류는 아닙니다. SystemExit, KeyboardInterrupt, StopIteration, GeneratorExit모든 예외가 아닌 오류가 있습니다. 실제 오류에서 '오류'라는 단어는 차이를 나타냅니다.

  3. '오류'는 '예외'보다 짧습니다. 의미 손실없이 코드 너비에 몇 개의 문자를 저장할 수 있습니다. 그것은 약간의 차이를 만듭니다.


2
모든 예외가 오류는 아닙니다 . 실제로라는 예외 클래스에서 파생되는 예외가 많이 있습니다 Warning. 내 대답을 참조하십시오 .
DavidRR



49

이 규칙은 PEP 8-Style Guide for Python Code 에서 비롯된 것이라고 생각합니다 .

예외 이름

예외는 클래스 여야하므로 클래스 명명 규칙이 여기에 적용됩니다. 그러나 예외 이름에 접미사 "오류"를 사용해야합니다 (예외가 실제로 오류 인 경우).


8

Python은이 점에서 Java와 상당히 유사합니다. 그러나 Python의 예외는 Java의 Throwable과 비교되어야합니다.

Throwables는 오류, RuntimeException 및 (확인 된) 예외와 같은 모든 종류의 풍미로 제공되므로 Python도 마찬가지입니다 (확인 된 예외는 없음).

언어의 경우 오류가 예외적이므로 상속 계층 구조가 이상하지 않습니다.

나는 특히 Exception이라는 이름이 마음에 들지 않습니다. 예외는 예외적 인 상황 (예 : 오류)뿐만 아니라 제어 흐름에서 벗어나기 위해서도 사용됩니다. 그것이 Exception이하는 일이기 때문입니다. 정상적인 제어 흐름에서 벗어나 표시된 지점으로 이동합니다. 고토와 비슷하지만 더 세련되었습니다.

즉, 적절한 반환 값을 찾을 수없는 상황이 발생할 때마다 예외를 사용하는 경향이 있습니다. 자바와 마찬가지로 Python에서 모두.


-1; 나는 이것이 유용한 통찰력을 제공한다고 생각하지 않습니다. 명확하게 정의하지 않고 '예외 상황'에 대해 이야기하고, 실제로 정확하지 않은 예외가 작동하는 방식 ( "정상적인 제어 흐름에서 벗어나 표시 지점으로 이동")에 대한 설명을 제공하고, 오류와 오류를 구분합니다. Java의 RuntimeException은 마치 Python에 유사한 구별이 존재하는 것처럼 (그렇지 않습니다), 실제로 Python의 예외가 Error이름에 종종 포함되는 이유에 대한 질문을 실제로 해결하지 않습니다 .
Mark Amery 2015-07-05

4

Q. Python 예외가 "오류"로 명명 된 이유는 무엇입니까?

대부분의 Python 예외가 오류 또는 경고 로 분류 되기 때문 이라고 생각합니다 . Python 예외의 이름이로 끝나는 Exception경우 이러한 구분이 불가능합니다.

경고의 예는 DeprecationWarningImportWarning입니다.

3.x 뿐만 아니라 내장 예외에 대해서는 2.x 클래스 계층 구조를 참조하십시오 .


3

간단히 말해서:

  • Python 예외의 이름은 "오류"가 아닙니다.
  • Python 오류의 이름은 "오류"입니다.
  • Python 오류는 발생, 포착 및 예외로 처리 될 수 있습니다.
  • 오류로 시작되는 항목은 오류 메시지를 생성하지 않는 처리 된 예외가 될 수 있습니다.
  • Exception직접 제기 할 수있다

개념:

저는 보통이 일을하지만 예외를 만들 게요

또는

이것은 일반적으로 오류이지만 예외를 만들고이를 포착 한 다음 몇 가지 절차를 수행합니다.

세부:

예외와 오류 :

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

실행 중에 감지 된 오류를 예외 라고 하며 무조건 치명적이지 않습니다.

워크 플로우 :

  • 프로그램은 오류를 모니터링합니다.
  • 오류가 발생했지만 실행 중에 프로그램에 의해 감지되지 않으면 오류 메시지가 표시됩니다.
  • 오류가 발생하여 실행 중에 프로그램에서 감지하면 예외입니다.
  • 프로그램에서 예외를 처리 할 수 ​​있습니다. 정상적으로 처리되거나 오류 메시지가 표시 될 수 있습니다.
  • 프로그램에 의해 처리되지 않는 예외 는 처리되지 않은 ( 포착되지 않은 ) 예외이며 오류 메시지가됩니다.

1

그냥 명명 일뿐입니다. Java에서는 이러한 종류의 오류를 확인하지 않아야하기 때문에 java.lang.Error다른 Throwable오류와 구별됩니다 . 파이썬에서는 모든 예외가 확인되지 않았으므로 구별이 무의미합니다.


기본 클래스는 Exception이라고합니다 (다른 답변에 대한 내 의견 참조). 그래서 자식도 Exception이라고 명명하지 않습니까?
Elena

@Elena : 왜냐하면 마침내 당신은 다음과 같은 것으로 끝날 것이기 때문에 class ExceptionHandlingException extends RuntimeException읽는 것은 끔찍합니다.
Esko

2
다른 사람들이 게시 한 다른 이유와는 별도로 Python 표준 라이브러리의 이름 지정이 항상 일관된 것은 아닙니다.
gustafc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.