매개 변수없는 예외 정의 :
class MyException(Exception):
pass
제기되면 다음과 같은 차이점이 있습니까?
raise MyException
과
raise MyException()
나는 아무것도 찾을 수 없었다. 단순히 오버로드 된 구문입니까?
답변
짧은 대답은 둘이다 raise MyException
그리고이 raise MyException()
같은 일을. 이 첫 번째 양식은 예외를 자동으로 인스턴스화합니다.
문서 의 관련 섹션에서 ” raise 는 첫 번째 표현식을 예외 객체로 평가합니다. 하위 클래스이거나 BaseException 인스턴스 여야합니다. 클래스 인 경우 필요한 경우 예외 인스턴스를 다음으로 인스턴스화하여 얻을 수 있습니다. 인수가 없습니다. “
즉, 의미가 동일하더라도 첫 번째 형식은 미시적으로 더 빠르고 두 번째 형식은 더 유연합니다 (필요한 경우 인수를 전달할 수 있기 때문입니다).
대부분의 사람들이 파이썬 (즉, 표준 라이브러리, 인기있는 응용 프로그램 및 많은 책에서)에서 사용하는 일반적인 스타일 raise MyException
은 인수가 없을 때 사용하는 것입니다. 사람들은 일부 인수를 전달해야 할 때만 예외를 직접 인스턴스화합니다. 예 : raise KeyError(badkey)
.
답변
문 에 대한 문서를raise
살펴보십시오 . 의 인스턴스를 만들고 MyException
있습니다.
답변
네, ValueError
와 사이에 차이가 있습니다.ValueError()
ValueError
클래스 ValueError()
의 인스턴스를 만드는 반면 클래스입니다. 이것이 type(ValueError) is type
및type(ValueError()) is ValueError
의 유일한 목적은 raise
예외를 제기하는 것입니다.
를 사용할 때
ValueError
생성자를 실행하는 클래스가 호출됩니다.ValueError()
를 사용
ValueError()
하면 메서드ValueError()
가 직접 호출됩니다.
노트 : raise ValueError # shorthand for 'raise ValueError()'