2 回答
TA贡献1799条经验 获得超6个赞
我认为您的方法可能不是最好的原因有很多。
有时应该抛出异常。例如,如果我将一些愚蠢的参数传递给函数,则它应该通过抛出异常来抱怨。您不想每次有人传递字符串而不是整数时都收到电子邮件,对吗?
此外,将整个内容包装在try ... except中是行不通的,因为那样只会捕获在定义类/函数(加载/导入模块时)期间发生的异常。例如,
# Your python library
try:
def foo():
raise Exception('foo exception')
return 42
except Exception as e:
print 'Handled: ', e
# A consumer of your library
foo()
仍然没有发现例外。
TA贡献1802条经验 获得超4个赞
我想您可以自己制作SelfMailingException并将其子类化。并不是说我会推荐这种方法。
另外一个选项:
def raises(*exception_list):
def wrap(f):
def wrapped_f(*x, **y):
try:
f(*x, **y)
except Exception as e:
if not isinstance(e, tuple(exception_list)):
print('send mail')
# send mail
raise
return wrapped_f
return wrap
用法:
@raises(MyException)
def foo():
...
添加回答
举报