使用类装饰器捕获所有类方法的异常不适用于 init 方法

Capture exception for all class methods with class decorator don't work for init method

提问人:soapcmd 提问时间:8/30/2023 更新时间:8/30/2023 访问量:17

问:

我想捕获所有方法(并给它们一个新的异常类型) 我创建了一个类装饰器来实现这一点,但异常处理不包括Myclass__init__

我该如何解决这个问题?还是其他实现此功能的方法? 谢谢!

class CustomError(Exception):
    pass

def add_exception_handling(cls):
    class DecoratedClass(cls):
        def __getattribute__(self, name):
            attr = super().__getattribute__(name)
            if callable(attr):
                def wrapper(*args, **kwargs):
                    try:
                        return attr(*args, **kwargs)
                    except Exception as e:
                        raise CustomError(e)
                return wrapper
            else:
                return attr
    return DecoratedClass

@add_exception_handling
class MyClass:
    def __init__(self):
        1 / 0
    def method1(self):
        1 + '1'
    def method2(self):
        a

我所期望的是: 执行时

myclass = MyClass()

目标结果是: CustomError:除以零

实际上我得到了: ZeroDivisionError:除以零

异常 python-decorators python-class

评论


答: 暂无答案