Пользовательские исключения Python с кодами ошибок и сообщениями об ошибках

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. "

и сообщают то же самое пользователю.

  1. Как мне определить эти коды ошибок и сообщения об ошибках в настраиваемых исключениях?
  2. Как мне вызвать / перехватить исключение в способ узнать, какой код ошибки / сообщение отображать?

(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]])
38
задан Community 23 May 2017 в 12:24
поделиться