这是一个上下文管理器:
class Timer:
def __init__(self):
self.elapsed = 0
def __enter__(self):
self.start = perf_counter()
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.stop = perf_counter()
self.elapsed = self.stop - self.start
if exc_type:
# modify error object
return False
我想为此上下文管理器中引发的所有错误消息添加一个前缀。
with Timer() as t:
raise ValueError("error occurred!")
这将打印 Within Timer: error occurred!
这可能吗?
class Timer:
def __init__(self):
self.elapsed = 0
def __enter__(self):
self.start = 5
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.stop = 5
self.elapsed = self.stop - self.start
if exc_value and exc_value.args:
msg = exc_value.args[0]
new_msg = "In Timer: " + msg
exc_value.args = (new_msg, *exc_value.args[1:])
return False
with Timer() as t:
raise ValueError('hello world')
Traceback (most recent call last):
File "...", line 19, in <module>
raise ValueError('hello world')
ValueError: In Timer: hello world
异常的第一个 arg 是消息,因此您只需修改它,然后将其余的 args 保持原样
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句