我想将其他信息添加到我的应用程序中的全局异常输出中。我不想尝试/捕获每个功能,并在那里冗余地调整消息。我想根据异常本身调整消息,以使其自动应用于所有地方。
示例:
>>> i = 1 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
它清楚地显示了消息division by zero
。假设我有一个函数get_hostname()
告诉我我的公共IP地址。我希望现在输出division by zero | 11.22.33.44
。同样,我不想在try / catch中包装有问题的行,我想更改此Exception本身的功能。
我该怎么做?
答案 0 :(得分:0)
不知道您的函数如何工作,但您将something
除以divisor
:
如果您知道divisor
可以为零,我肯定会尝试捕获异常或使用if语句:
def get_hostname():
divisor = 0
something = 1
if divisor == 0:
raise ZeroDivisionError('division by zero | 11.22.33.44')
return something / divisor
其他选择是使用装饰器:
from functools import wraps
def extra_info(ip):
def dec(f):
def _decorator(*args, **kwargs):
try:
ans = f(*args, **kwargs)
except ZeroDivisionError:
raise ZeroDivisionError('division by zero | {}'.format(ip))
return ans
return wraps(f)(_decorator)
return dec
@extra_info('11.22.33.44')
def get_hostname():
divisor = 0
something = 1
return something / divisor