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