2010-05-24 3 views
19

Python 2.6에서 내 자신의 (아주 간단한) 예외 클래스를 정의하려고하는데, 아무리해도 경고를받습니다.PyLint를 사용하지 않고 Python에서 예외를 정의하는 "올바른"방법

첫째, 가장 간단한 방법 :

class MyException(Exception): 
    pass 

이 작동하지만, 런타임에 경고를 출력 : DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 OK, 그 방법이 아니다 그래서.

class MyException(Exception): 
    def __init__(self, message): 
     self.message = message 

이 또한 작동하지만 PyLint 경고보고 : 나는 다음 시도 W0231: MyException.__init__: __init__ method from base class 'Exception' is not called을. 그래서 전화 해 보았습니다.

class MyException(Exception): 
    def __init__(self, message): 
     super(Exception, self).__init__(message) 
     self.message = message 

이 기능도 작동합니다. 그러나 이제는 PyLint가 오류를보고합니다 : E1003: MyException.__init__: Bad first argument 'Exception' given to super class

경고없이 어떻게 간단한 일을합니까?

+4

'lint'는 경고의 측면에서 항상 오류가있어 사용자가 실제로 신경 쓰지 않는 경고를 생성하고 사용하지 않는 방법을 추가하여 부작용을 시도하는 등 부작용을 유발할 수 있습니다. 어떤 보풀도 불평하지 않는 것은 가치있는 목표는 아니며 모든 불만을 이해하는 것입니다. – msw

답변

28

당신이 super를 호출 할 때, 당신은 첫 번째 인수가 아닌 주/기본 클래스로 서브 클래스/파생 클래스가 필요 :이 행복 PyLint를 유지할 것으로 보인다. 파이썬 온라인 설명서에서

다음과 같이

class C(B): 
    def method(self, arg): 
     super(C, self).method(arg) 

그래서 예외가 정의 될 것이다 :

class MyException(Exception): 
    def __init__(self, message): 
     super(MyException, self).__init__(message) 
     self.message = message 
+1

아 물론! – EMP

+0

아,이 예제를 조금 더 살펴 보더라도 다음과 같이 할 수 있습니다. super (MyException, self) .__ init __ ('MyException prefix : {0}'. 메시지)), 어느 쪽이든, 그것은 훌륭한 대답입니다! – lpapp

6

좋아요, 생각났습니다.

class MyException(Exception): 
    def __init__(self, message): 
     Exception.__init__(self, message) 
     self.message = message 
0

첫 번째 방법은 작동합니다. 나는 파이썬 2.6.5에서 항상 이것을 사용한다. 그러나 나는 "message"속성을 사용하지 않습니다. 아마도 첫 번째 예제에서 런타임 경고가 표시되는 이유 일 수 있습니다.

class MyException(Exception): 
    pass 

def thrower(): 
    error_value = 3 
    raise MyException("My message", error_value) 
    return 4 

def catcher(): 
    try: 
     print thrower() 
    except MyException as (message, error_value): 
     print message, "error value:", error_value 

결과 : PyLint 위에 문제가있는 것인지 모르겠어요

>>> catcher() 
My message error value: 3 

다음 코드는, 예를 들어, 오류 또는 런타임 경고없이 실행 .

관련 문제