Python 上下文管理器:是否可以在 __exit__ 中修改错误对象?

Junming Wang

这是一个上下文管理器:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在上下文管理器的__exit__中处理异常?

停止python进程,以便上下文管理器仍调用__exit __(在Windows中)

上下文管理器可以在 Python 中多次运行包含的块吗?

我真的陷入了上下文管理器(__enter__ 和 __exit__)和 mysql.connector 的错误中

Python中的琐碎上下文管理器

在python中调用上下文管理器

Python中是否有一种方法可以手动退出“ with”语句(上下文管理器)

我们可以像在python中一样在Go中创建上下文管理器吗

从内部使用with语句和上下文管理器的__exit__方法产生

上下文管理器的单元测试失败,并出现AttributeError:__exit__

在Python中充当装饰器和上下文管理器的函数吗?

python中的上下文管理器和帮助器功能

为类拥有的对象组成上下文管理器的Python方法

Python修补程序上下文管理器返回对象

Python如何通过上下文管理器强制对象实例化?

在Python2.7上下文管理器类中处理异常的正确方法

在python中调用上下文管理器的多种方法

装饰上下文管理器中的任何python函数

如何在python中链接上下文管理器?

如何在Python 3中嵌套异步上下文管理器

Python Speech_Recognition - “此音频源已在上下文管理器中”

在python中的上下文管理器之前或之后循环

Python 上下文管理器

With 语句中的异常不会传递给自定义上下文管理器 __exit__

Python多处理库错误(AttributeError:__exit__)

Python csv编写器“ AttributeError:__ exit__”问题

套接字__exit__在python中关闭吗?

Connection .__ exit__是否在sqlite3中自行关闭?

上下文管理器作为装饰器可以访问产生的对象