2014-01-15 5 views
0

Я хочу, чтобы мое пользовательское исключение могло печатать настраиваемое сообщение при его повышении. Я получил этот подход (simplifyed):Пользовательское исключение python с настраиваемым сообщением

class BooError(Exception): 
    def __init__(self, *args): 
     super(BooError, self).__init__(*args) 
     self.message = 'Boo' 

Но результат меня не удовлетворяет:

raise BooError('asdcasdcasd') 

Выход:

Traceback (most recent call last): 
    File "hookerror.py", line 8, in <module> 
    raise BooError('asdcasdcasd') 
__main__.BooError: asdcasdcasd 

Я ожидал что-то вроде:

... 
__main__.BooError: Boo 

Я знаю о message является устаревшим. Но я не знаю, какой правильный способ настроить сообщение об ошибке?

+5

Каким образом результат не удовлетворит вас? Какой результат вы хотите? – BrenBarn

+0

Ожидания добавлены – I159

+0

, возможно, добавить 'return self.message' в конце метода' __init__'? Это, вероятно, плохой стиль, но может работать :) –

ответ

2

Вам необходимо установить args кортеж, а также:

class BooError(Exception): 
    def __init__(self, *args): 
     super(BooError, self).__init__(*args) 
     self.args = ('Boo',) 
     self.message = self.args[0] 

где self.message обычно устанавливается с первого args пункта. Атрибут message в противном случае полностью игнорируется классом Exception.

Вы бы гораздо лучше передавая аргумент __init__:

class BooError(Exception): 
    def __init__(self, *args): 
     super(BooError, self).__init__('Boo') 
+0

Почему бы не передать его как параметр super __init__? – Alvaro

+0

В качестве альтернативы, он мог бы просто выполнить супер (BooError, self) .__ init __ ('Boo') ' –

Смежные вопросы