[python] “raise exception ()”과“raise exception”사이에 괄호없이 차이가 있습니까?

매개 변수없는 예외 정의 :

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 typetype(ValueError()) is ValueError

의 유일한 목적은 raise예외를 제기하는 것입니다.

를 사용할 때 ValueError생성자를 실행하는 클래스가 호출됩니다. ValueError()

를 사용 ValueError()하면 메서드 ValueError()가 직접 호출됩니다.

노트 : raise ValueError # shorthand for 'raise ValueError()'


답변