Проблема подкласса BaseException в Python - PullRequest
6 голосов
/ 18 декабря 2008

Я хотел создать свой собственный класс исключений Python, например:

class MyException(BaseException):
    def __init__(self, errno, address):
        if errno == 10048:
            mess = str(address) + ' is already in use'
        else:
            mess = 'Unable to open ' + str(address)
        BaseException.__init__(mess)

но когда программа добралась до звонка на BaseException.__init__(), я получил эту трассировку:

BaseException.__init__(mess)
TypeError: descriptor '__init__' requires a 'exceptions.BaseException' object but received a 'str'

Я думал, что BaseException примет любой набор аргументов. Кроме того, как я должен передать объект Exception.BaseException в Exception.BaseException конструктор?

Ответы [ 2 ]

10 голосов
/ 18 декабря 2008

Вы должны вызвать метод базового класса с экземпляром в качестве первого аргумента:

BaseException.__init__(self, mess)

Цитировать из учебника :

Переопределяющий метод в производном классе может фактически хотеть расширить, а не просто заменить метод базового класса с тем же именем. Существует простой способ прямого вызова метода базового класса: просто вызовите BaseClassName.methodname(self, arguments). Это иногда полезно и для клиентов. (Обратите внимание, что это работает только в том случае, если базовый класс определен или импортирован непосредственно в глобальную область.)

Как упомянуто Тони Арклсом и в документации ,

Все встроенные, не выходящие из системы исключения, являются производными от этого класса. Все определяемые пользователем исключения также должны быть получены из [Exception].

так что вы не должны наследовать от BaseException, так или иначе ...

6 голосов
/ 18 декабря 2008

хоп имеет право.

В качестве примечания: вы не должны создавать подкласс BaseException, вместо этого вы должны создавать подклассы Exception (Если вы действительно не знаете, что делаете)

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