覆盖Python异常消息

时间:2019-03-06 19:20:54

标签: python exception logging

我想将其他信息添加到我的应用程序中的全局异常输出中。我不想尝试/捕获每个功能,并在那里冗余地调整消息。我想根据异常本身调整消息,以使其自动应用于所有地方。

示例:

>>> 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本身的功能。

我该怎么做?

1 个答案:

答案 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