簡體   English   中英

覆蓋Python異常消息

[英]Override Python Exception Message

我想在我的應用程序中全局向異常輸出添加其他信息。 我不想嘗試/捕獲每個功能,並在那里冗余地調整消息。 我想對異常本身進行調整,以使其自動應用於所有地方。

瑣碎的例子:

>>> 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 division by zero | 11.22.33.44 同樣,我不想在try / catch中包裝有問題的行,而是想更改此Exception本身的功能。

我怎樣才能做到這一點?

不知道您的函數是如何工作的,但是您正在用divisor除以something

如果您知道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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM