代码之家  ›  专栏  ›  技术社区  ›  Lokesh Agrawal

在自定义异常中使用super和_uinit__uu[已关闭]

  •  -2
  • Lokesh Agrawal  · 技术社区  · 7 年前

    我不明白下面这行代码。在我看来这是一个奇怪的语法。

    super(CustomError, self).__init__(message, base_message, args)

    class CustomError(Exception):
        """
        Abstract Base class for all exceptions raised in this ecosystem.
    
        """
        def __init__(self, message, base_message, *args):
            """
            :param message:
                Message to be displayed to user.
    
            :param base_message:
                Message to be passed to base class.
    
            :param args:
                Arguments to be passed to CustomError object.
    
            """
            super(CustomError, self).__init__(message, base_message, args)
    

    有人能帮我理解这在内部做什么吗?这项研究的目的是什么 base_message args .

    1 回复  |  直到 7 年前
        1
  •  2
  •   Steve    7 年前

    CustomError类(子类)继承自类异常(父类)。引用的行调用父类的构造函数。在CustomError的构造函数中调用它意味着在创建CustomeError实例时,父类的构造函数也会被调用。

    这些消息是异常的不同参数。

    看起来自定义错误是将任何附加参数捆绑到一个元组中。

    请参见下面的示例:

            class CustomError(Exception):
                """
                Abstract Base class for all exceptions raised in this ecosystem.
    
                """
                def __init__(self, message, base_message, *args):
                    """
                    :param message:
                        Message to be displayed to user.
    
                    :param base_message:
                        Message to be passed to base class.
    
                    :param args:
                        Arguments to be passed to CustomError object.
    
                    """
                    super(CustomError, self).__init__(message, base_message, args)
    
            try:
                raise Exception('m1','m2',1,2,3)
            except Exception as e:
                print (e.args) #('m1', 'm2', 1, 2, 3)
    
            try:
                raise CustomError('m1','m2',1,2,3)
            except CustomError as c:
                print (c.args) #('m1', 'm2', ([1, 2, 3],))