Python神奇的方法来改变处理对象的方式

Python神奇的方法来改变处理对象的方式,python,exception,custom-exceptions,Python,Exception,Custom Exceptions,我想知道,python中是否有一个简单的神奇方法,允许在异常派生对象被引发时自定义其行为?我正在寻找类似于\uuuuu raise\uuuu的东西,如果存在的话。如果没有这种神奇的方法存在,我有没有办法做如下事情(这只是一个例子来证明我的观点): 有可能吗?我不知道这种神奇的方法,但即使它存在,也只是在实际引发异常对象之前执行的一段代码。假设引发在适当位置实例化的异常对象是一种好的做法,那么您可以将此类代码放入异常的\uuuu init\uuuu。另一个解决方法:不是直接引发异常,而是调用一个执

我想知道,python中是否有一个简单的神奇方法,允许在异常派生对象被引发时自定义其行为?我正在寻找类似于
\uuuuu raise\uuuu
的东西,如果存在的话。如果没有这种神奇的方法存在,我有没有办法做如下事情(这只是一个例子来证明我的观点):


有可能吗?

我不知道这种神奇的方法,但即使它存在,也只是在实际引发异常对象之前执行的一段代码。假设引发在适当位置实例化的异常对象是一种好的做法,那么您可以将此类代码放入异常的
\uuuu init\uuuu
。另一个解决方法:不是直接引发异常,而是调用一个执行特殊代码的错误处理方法/函数,然后最终引发异常。

在您的示例中,像
\uuu call\uu
这样的方法不是更合适吗?该示例是任意的,我只是想知道是否有一种方法可以自定义提升对象的功能。我刚刚想到了一些其他的东西(但很有用)。在某些语言(例如Java)中,必须创建引发/抛出异常的异常对象,因为stacktrace由异常基类的构造函数捕获。在python中,跟踪由raise自身捕获。。。在引发异常的地方实例化异常是一种很好的做法。
import time
from functools import wraps


def capture_exception(callback=None, *c_args, **c_kwargs):
    """捕获到异常后执行回调函数"""
    assert callable(callback), "callback 必须是可执行对象"

    def _out(func):
        @wraps(func)
        def _inner(*args, **kwargs):
            try:
                res = func(*args, **kwargs)
                return res
            except Exception as e:
                callback(*c_args, **c_kwargs)
                raise e

        return _inner

    return _out


def send_warning():
    print("warning message..............")


class A(object):
    @capture_exception(callback=send_warning)
    def run(self):
        print('run')
        raise SystemError("测试异常捕获回调功能")
        time.sleep(0.2)


if __name__ == '__main__':
    a = A()
    a.run()

import time
from functools import wraps


def capture_exception(callback=None, *c_args, **c_kwargs):
    """捕获到异常后执行回调函数"""
    assert callable(callback), "callback 必须是可执行对象"

    def _out(func):
        @wraps(func)
        def _inner(*args, **kwargs):
            try:
                res = func(*args, **kwargs)
                return res
            except Exception as e:
                callback(*c_args, **c_kwargs)
                raise e

        return _inner

    return _out


def send_warning():
    print("warning message..............")


class A(object):
    @capture_exception(callback=send_warning)
    def run(self):
        print('run')
        raise SystemError("测试异常捕获回调功能")
        time.sleep(0.2)


if __name__ == '__main__':
    a = A()
    a.run()