파이썬 예외 "오류"(예 : 명명 된 이유는 ZeroDivisionError
, NameError
, TypeError
)가 아닌 "예외"(예를 들어 ZeroDivisionException
, NameException
, TypeException
).
저는 Java 배경에서 왔으며 최근에 Python을 배우기 시작했습니다. Java에서는 오류와 예외가 구별되기 때문에 혼란 스럽습니다.
파이썬에도 차이가 있습니까?
답변:
이름에 'Class'를 사용하고 각 변수에 '_variable'을 사용하여 각 클래스의 이름을 지정하지 않습니다. '예외'라는 단어를 사용하여 예외 이름을 지정하지 않는 것과 같은 방식입니다. 이름은 대상의 의미에 대해 말해야합니다. '오류'는 대부분의 예외의 의미입니다.
모든 예외가 오류는 아닙니다. SystemExit
, KeyboardInterrupt
, StopIteration
, GeneratorExit
모든 예외가 아닌 오류가 있습니다. 실제 오류에서 '오류'라는 단어는 차이를 나타냅니다.
'오류'는 '예외'보다 짧습니다. 의미 손실없이 코드 너비에 몇 개의 문자를 저장할 수 있습니다. 그것은 약간의 차이를 만듭니다.
이 규칙은 PEP 8-Style Guide for Python Code 에서 비롯된 것이라고 생각합니다 .
예외 이름
예외는 클래스 여야하므로 클래스 명명 규칙이 여기에 적용됩니다. 그러나 예외 이름에 접미사 "오류"를 사용해야합니다 (예외가 실제로 오류 인 경우).
Python은이 점에서 Java와 상당히 유사합니다. 그러나 Python의 예외는 Java의 Throwable과 비교되어야합니다.
Throwables는 오류, RuntimeException 및 (확인 된) 예외와 같은 모든 종류의 풍미로 제공되므로 Python도 마찬가지입니다 (확인 된 예외는 없음).
언어의 경우 오류가 예외적이므로 상속 계층 구조가 이상하지 않습니다.
나는 특히 Exception이라는 이름이 마음에 들지 않습니다. 예외는 예외적 인 상황 (예 : 오류)뿐만 아니라 제어 흐름에서 벗어나기 위해서도 사용됩니다. 그것이 Exception이하는 일이기 때문입니다. 정상적인 제어 흐름에서 벗어나 표시된 지점으로 이동합니다. 고토와 비슷하지만 더 세련되었습니다.
즉, 적절한 반환 값을 찾을 수없는 상황이 발생할 때마다 예외를 사용하는 경향이 있습니다. 자바와 마찬가지로 Python에서 모두.
Error
이름에 종종 포함되는 이유에 대한 질문을 실제로 해결하지 않습니다 .
Q. Python 예외가 "오류"로 명명 된 이유는 무엇입니까?
대부분의 Python 예외가 오류 또는 경고 로 분류 되기 때문 이라고 생각합니다 . Python 예외의 이름이로 끝나는 Exception
경우 이러한 구분이 불가능합니다.
경고의 예는 DeprecationWarning
및 ImportWarning
입니다.
3.x 뿐만 아니라 내장 예외에 대해서는 2.x 클래스 계층 구조를 참조하십시오 .
간단히 말해서:
Exception
직접 제기 할 수있다개념:
저는 보통이 일을하지만 예외를 만들 게요
또는
이것은 일반적으로 오류이지만 예외를 만들고이를 포착 한 다음 몇 가지 절차를 수행합니다.
세부:
예외와 오류 :
https://docs.python.org/2/tutorial/errors.html
실행 중에 감지 된 오류를 예외 라고 하며 무조건 치명적이지 않습니다.
워크 플로우 :
그냥 명명 일뿐입니다. Java에서는 이러한 종류의 오류를 확인하지 않아야하기 때문에 java.lang.Error
다른 Throwable
오류와 구별됩니다 . 파이썬에서는 모든 예외가 확인되지 않았으므로 구별이 무의미합니다.
class ExceptionHandlingException extends RuntimeException
읽는 것은 끔찍합니다.
Warning
. 내 대답을 참조하십시오 .