Использование Exception .__ init __ (self) для определенных пользователем исключений - PullRequest
1 голос
/ 05 июля 2019

Я искал в Интернете, чтобы понять, как использовать Exception.__init__(self) для определенных пользователем исключений.

Например:

У меня есть два пользовательских исключения с одним Exception.__init__(self) и вторым без.

class MyFirstError(Exception):
    def __init__(self, result):
        Exception.__init__(self)
        self.result = result

class MySecondError(Exception):
    def __init__(self, result):
        self.result = result

def test():
    try:
        raise MyFirstError("__My First Error__")
    except MyFirstError as exc:
        return exc.result

def test2():
    try:
        raise MySecondError("__ My Second Error__")
    except MySecondError as exc:
        return exc.result

if __name__ == "__main__":
    print(test())
    print(test2())

Выход:

__My First Error__
__ My Second Error__

Они оба делают похожие вещи. Я не мог понять разницу.

1 Ответ

2 голосов
/ 15 июля 2019

Более правильный синтаксис будет super().__init__() для Python3 или super(MyFirstError, self).__init__() для Python2.

Обычно вы делаете это, когда переопределяете __init__() в подклассе, и вам также необходимо вызвать конструктор базового класса.В вашем конкретном случае нет никакой пользы от вызова базового конструктора Exception без параметров, так как он не делает ничего сложного, но вы можете передать result в конструктор Exception, чтобы вам не пришлось хранить self.result самостоятельнов подклассе.

Пример:

class MyFirstError(Exception):
    def __init__(self, result):
        super().__init__(result)  # will pass result as an argument to the base Exception class

Хотя, то же самое можно сделать гораздо более коротким способом:

class MyFirstError(Exception): pass

Поскольку вы не реализуетеконструктор, базовый метод __init__(result) будет неявно вызываться для достижения того же результата, что и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...