질문 : 최신 Python에서 사용자 지정 예외를 선언하는 적절한 방법은 무엇입니까?
최신 Python에서 사용자 지정 예외 클래스를 선언하는 적절한 방법은 무엇입니까? 내 주된 목표는 다른 예외 클래스의 표준을 따르는 것이므로 예외에 포함 된 추가 문자열이 예외를 포착 한 도구에 의해 인쇄됩니다.
"현대적인 Python"이란 Python 2.5에서 실행되지만 Python 2.6 및 Python 3. * 작업 방식에서는 '올바른'것을 의미합니다. 그리고 "사용자 지정"이란 오류의 원인에 대한 추가 데이터를 포함 할 수있는 Exception 개체를 의미합니다. 문자열, 예외와 관련된 다른 임의 개체 일 수도 있습니다.
Python 2.6.2에서 다음과 같은 사용 중단 경고가 발생했습니다.
>>> class MyError(Exception):
... def __init__(self, message):
... self.message = message
...
>>> MyError("foo")
_sandbox.py:3: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
BaseException
message
라는 속성에 특별한 의미가 있다는 것은 미친 것처럼 보입니다. 나는 PEP-352 에서 2.5에서 특수한 의미를 가지고 있다는 것을 모았습니다. 그들은 그 이름 (그리고 그 하나만)이 이제 금지되어 있다고 생각합니까? 으.
Exception
에 매직 매개 변수 args
가 있다는 것을 모호하게 알고 있지만 사용 방법을 결코 알지 못했습니다. 앞으로 일을하는 것이 올바른 방법이라고 확신하지도 않습니다. 온라인에서 찾은 많은 토론에서 Python 3에서 args를 제거하려고 시도하고 있다고 제안했습니다.
업데이트 : 두 가지 답변이 __init__
및 __str__
/ __unicode__
/ __repr__
재정의를 제안했습니다. 타이핑이 많은 것 같네요. 필요합니까?
답변
질문을 놓쳤을 수도 있지만 왜 안 되는가 :
class MyException(Exception):
pass
무언가를 재정의 (또는 추가 인수 전달)하려면 다음과 같이하십시오.
class ValidationError(Exception):
def __init__(self, message, errors):
# Call the base class constructor with the parameters it needs
super().__init__(message)
# Now for your custom code...
self.errors = errors
그런 식으로 오류 메시지의 dict를 두 번째 매개 변수에 전달하고 나중에 e.errors
있습니다.
Python 2에서는 약간 더 복잡한 super()
형식을 사용해야합니다.
super(ValidationError, self).__init__(message)
출처 : https://stackoverflow.com/questions/1319615/proper-way-to-declare-custom-exceptions-in-modern-python
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python 코드를 배포할 때 코드를 보호 하는 방법 (0) | 2021.10.26 |
---|---|
Python의 time.time ()은 로컬 또는 UTC 타임 스탬프를 반환하는 방법 (0) | 2021.10.26 |
Pandas에서 DataFrame의 행을 반복하는 방법 (0) | 2021.10.26 |
Python에서 날짜 범위 만들기 (0) | 2021.10.25 |
파이썬에서 문자열에서 숫자를 추출하는 방법 (0) | 2021.10.25 |