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. "
и сообщите об этом пользователю.
- Как определить эти коды ошибок и сообщения об ошибках в пользовательских исключениях?
- Как мне повысить/исключить ловушку таким образом, чтобы я знал, какой код ошибки/сообщение отображать?
(P.S: Это для Python 2.4.3).
Bastien Léonard упоминает в этом 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]])