[英]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.