프로그래밍 언어/Python

최신 Python에서 사용자 지정 예외를 선언하는 적절한 방법

Rateye 2021. 10. 26. 10:32
728x90
반응형
질문 : 최신 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
728x90
반응형