2016-12-07 2 views
-1
class MissingnumError (CheckError): 
    def __init__(self, num, type = "Animal"): 
     self.num = num 
     self.type = type 
    def __str__(self): 
     forma = '%s #%d not found'%(self.type,self.num) 
     return forma 
    def __repr__(self): 
     return str(self) 

Если я хочу получить доступ к этой ошибке и поднять ее из другого класса, как это сделать? Скажем, я определяю некоторые функции внутри другого класса, я буду зацикливаться над списком животных, но если животное не будет найдено, мне нужно будет поднять вышеуказанную ошибку. Как мне получить доступ к нему и получить его для печати str: forma ???Raising Определенная вручную ошибка с классом

пример:

def myfnction(self, animal): 
    for something in listofthings: 
     if something == animal: 
      return something 
    raise MissingnumError 

Как поднять эту ошибку правильно, через доступ к классом выше и печать ул ???

+1

Ошибка требует некоторого номера ошибки. Предположим, что его 10, затем 'поднять MissingnumError (10)'. – tdelaney

+0

Что такое 'CheckError', из которого вы наследуете? Является ли это подклассом «Исключение»? Вы можете проверить этот путь: 'issubclass (CheckError, Exception)'. –

+0

'raise MissingnumError (1)' или что-то вроде 'num'. (Кстати, если 'num' отсутствует,' MissingnumError', вероятно, должен * not * иметь атрибут 'num', или имя исключения является неправильным.) – Evert

ответ

0

Вы просто raise это, поставляя экземпляр raise с соответствующим требуемым аргументом (num как определено в вашем __init__):

raise MissingnumError(1) 

Если не указано ни одного обработчика Python будет просто __repr__ его и возвращает сообщение в указанные:

MissingnumError: Animal #1 not found 

Две дополнительные примечания:

  • Не используйте type в качестве имени аргумента. type уже используется Python для другой цели, и вы маскируете его внутри тела метода.
  • CheckError должен наследовать от Exception, это требуется на любых объектах, которые вы указываете на raise.
+0

Что вы подразумеваете под требуемым аргументом? – Wanderer

+1

@RickTeachey нет, это не так, мой вопрос в том, что 'raise MissingnumError' будет проблемой. – jonrsharpe

+0

@Wanderer они означают аргумент '__init__', который требуется, 'num'. – jonrsharpe

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