Custom Python Exceptions with Error Codes and Error Messages

后端 未结 2 1711
灰色年华
灰色年华 2020-12-13 00:29
class AppError(Exception):
    pass

class MissingInputError(AppError):
    pass

class ValidationError(AppError):
    pass

...

def v         


        
相关标签:
2条回答
  • 2020-12-13 00:36

    Here's a quick example of a custom Exception class with special codes:

    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)
    

    Since you were asking about how to use args here's an additional example...

    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]))
    
    0 讨论(0)
  • 2020-12-13 00:46

    This is an example of a custom exception I created which makes use of pre-defined error codes:

    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
    

    The enum ErrorCodes is used to define error codes. The exception is created in such a way that the error code passed is prefixed to the exception message.

    0 讨论(0)
提交回复
热议问题