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: «Параметр Multiple Day недействителен. Допустимые значения: 2, 5 и 7».
и сообщить об этом пользователю.
- Как определить эти коды ошибок и сообщения об ошибках в пользовательских исключениях?
- Как вызвать / перехватить исключение таким образом, чтобы я знал, какой код ошибки / сообщение отображать?
(P.S .: Это для Python 2.4.3).
Бастиен Леонар упоминает в этом комментарии SO , что вам не нужно всегда определять новое __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]])