괄호가 없는 "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
'programing' 카테고리의 다른 글
읽기 및 쓰기를 동시에 열기 (0) | 2023.07.24 |
---|---|
DOM에 HTML 문자열 추가 (0) | 2023.07.24 |
NLS_NCHAR_CHARACSET과 NLS_CHARACSET for Oracle 간의 차이 (0) | 2023.07.24 |
MariaDB Left join이 예상 결과를 반환하지 않음 (0) | 2023.07.24 |
업데이트 쿼리의 SQL 트리거에 오류가 있습니다. (0) | 2023.07.24 |