programing

괄호가 없는 "raise exception()"과 "raise exception"의 차이점이 있습니까?

javamemo 2023. 7. 24. 22:10
반응형

괄호가 없는 "raise exception()"과 "raise exception"의 차이점이 있습니까?

매개 변수 없는 예외 정의:

class MyException(Exception):
    pass

높이면 다음과 같은 차이가 있습니까?

raise MyException

그리고.

raise MyException()

찾을 수가 없었습니다. 단순히 구문이 오버로드된 건가요?

간단히 말하면 둘 다raise MyException그리고.raise MyException()같은 일을 합니다.이 첫 번째 양식은 예외를 자동으로 인스턴스화합니다.

문서의 관련 섹션에는 다음과 같이 나와 있습니다.

raise는 첫 번째 식을 예외 개체로 평가합니다.BaseException의 하위 클래스 또는 인스턴스여야 합니다.클래스인 경우 예외 인스턴스는 인수 없이 클래스를 인스턴스화하여 필요할 때 가져옵니다.

즉, 의미론이 동일하더라도 첫 번째 형식은 미시적으로 더 빠르고 두 번째 형식은 더 유연합니다(필요한 경우 인수를 전달할 수 있기 때문입니다).

대부분의 사람들이 파이썬에서 사용하는 일반적인 스타일(즉, 표준 라이브러리, 인기 있는 응용 프로그램 및 많은 책에서)은 다음과 같습니다.raise MyException인수가 없을 때사람들은 일부 인수를 통과해야 할 때만 예외를 직접 인스턴스화합니다.예:raise KeyError(badkey).

가서 진술서를 찾아보세요.의 사례를 만들고 있습니다.MyException.

예, 사이에는 차이가 있습니다.ValueError그리고.ValueError()

ValueError반면에 클래스입니다.ValueError()클래스의 인스턴스를 만듭니다.이것이 바로 그 이유입니다.type(ValueError) is type그리고.type(ValueError()) is ValueError

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

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

사용할 때ValueError()방법ValueError()직접 호출됩니다.

참고:raise ValueError # shorthand for 'raise ValueError()'

언급URL : https://stackoverflow.com/questions/16706956/is-there-a-difference-between-raise-exception-and-raise-exception-without

반응형