带有错误代码和错误消息的自定义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。” 并向用户报告。 如何在自定义异常中定义这些错误代码和错误消息? 如何以我知道要显示的错误代码/消息的方式引发/捕获异常? (PS:这是针对Python 2.4.3)。 BastienLéonard在此SO注释中提到,您不必总是定义新的ѭ2you或
__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]])
    
已邀请:
        这是带有特殊代码的自定义
Exception
类的快速示例:
class ErrorWithCode(Exception):
    def __init__(self, code):
        self.code = code
    def __str__(self):
        return repr(self.code)

try:
    raise ErrorWithCode(1000)
except ErrorWithCode as e:
    print(\"Received error with code:\", e.code)
由于您在询问如何使用
args
,因此这里还有一个示例...
class ErrorWithArgs(Exception):
    def __init__(self, *args):
        # *args is used to get a list of the parameters passed in
        self.args = [a for a in args]

try:
    raise ErrorWithArgs(1, \"text\", \"some more text\")
except ErrorWithArgs as e:
    print(\"%d: %s - %s\" % (e.args[0], e.args[1], e.args[2]))
    
        这是我创建的使用预定义错误代码的自定义异常的示例:
class CustomError(Exception):
\"\"\"
Custom Exception
\"\"\"

  def __init__(self, error_code, message=\'\', *args, **kwargs):

      # Raise a separate exception in case the error code passed isn\'t specified in the ErrorCodes enum
      if not isinstance(error_code, ErrorCodes):
          msg = \'Error code passed in the error_code param must be of type {0}\'
          raise CustomError(ErrorCodes.ERR_INCORRECT_ERRCODE, msg, ErrorCodes.__class__.__name__)

      # Storing the error code on the exception object
      self.error_code = error_code

      # storing the traceback which provides useful information about where the exception occurred
      self.traceback = sys.exc_info()

      # Prefixing the error code to the exception message
      try:
          msg = \'[{0}] {1}\'.format(error_code.name, message.format(*args, **kwargs))
      except (IndexError, KeyError):
          msg = \'[{0}] {1}\'.format(error_code.name, message)

      super().__init__(msg)


# Error codes for all module exceptions
@unique
class ErrorCodes(Enum):
    ERR_INCORRECT_ERRCODE = auto()      # error code passed is not specified in enum ErrorCodes
    ERR_SITUATION_1 = auto()            # description of situation 1
    ERR_SITUATION_2 = auto()            # description of situation 2
    ERR_SITUATION_3 = auto()            # description of situation 3
    ERR_SITUATION_4 = auto()            # description of situation 4
    ERR_SITUATION_5 = auto()            # description of situation 5
    ERR_SITUATION_6 = auto()            # description of situation 6
枚举ErrorCodes用于定义错误代码。 以这样的方式创建异常:将传递的错误代码添加到异常消息的前缀。     

要回复问题请先登录注册