class AppError(Exception): pass class MissingInputError(AppError): pass class ValidationError(AppError): pass
...
def validate(self): """ Validate Input and save it """ params = self.__params if 'key' in params: self.__validateKey(escape(params['key'][0])) else: raise MissingInputError if 'svc' in params: self.__validateService(escape(params['svc'][0])) else: raise MissingInputError if 'dt' in params: self.__validateDate(escape(params['dt'][0])) else: raise MissingInputError def __validateMulti(self, m): """ Validate Multiple Days Request""" if m not in Input.__validDays: raise ValidationError self.__dCast = int(m)
validate () и __validateMulti () - это методы класс, который проверяет и сохраняет переданные входные параметры. Как видно из кода, я вызываю некоторые пользовательские исключения, когда какой-либо входной параметр отсутствует или некоторая проверка не выполняется.
Я хотел бы определить некоторые пользовательские коды ошибок и сообщения об ошибках, специфичные для моего приложения, например
Ошибка 1100 : «Ключевой параметр не найден. Проверьте введенные данные.»
Ошибка 1101: «Параметр даты не найден. Проверьте введенные данные»
...
Ошибка 2100: «Недопустимый параметр нескольких дней. Допустимые значения: 2, 5 и 7. "
и сообщают то же самое пользователю.
- Как мне определить эти коды ошибок и сообщения об ошибках в настраиваемых исключениях?
- Как мне вызвать / перехватить исключение в способ узнать, какой код ошибки / сообщение отображать?
(PS: это для Python 2.4.3).
Бастьен Леонар упоминает в этом комментарии SO , который вы не используете 't необходимо всегда определять новый
__ init __
или__ str __
; по умолчанию аргументы будут помещены в self.args и будут напечатаны как__ str __
.Таким образом, решение, которое я предпочитаю:
class AppError(Exception): pass class MissingInputError(AppError): # define the error codes & messages here em = {1101: "Some error here. Please verify.", \ 1102: "Another here. Please verify.", \ 1103: "One more here. Please verify.", \ 1104: "That was idiotic. Please verify."}
Использование:
try: # do something here that calls # raise MissingInputError(1101) except MissingInputError, e print "%d: %s" % (e.args[0], e.em[e.args[0]])