用"with"编写python装饰器

Mik*_*ail 0 python

我正在尝试编写一个可以与with关键字一起使用的装饰器.

# regular code ...
with my_exception_handler():
    # dangerous code ...
# regular code ...
Run Code Online (Sandbox Code Playgroud)

并且my_exception_handler将接收一个函数并将其包装在一个巨大的try-except中.

我想让它成为装饰器/包装器,因为它是很多我不想复制粘贴的代码.我无法弄清楚从哪里开始.我写了一个普通的装饰器,它适用于函数,但不适用于中间代码块.

Eri*_*lun 5

你使用的东西with,是一个上下文管理器而不是装饰器 - 这是两个完全不同的东西.

编辑:请参阅kindall的帖子,了解如何编写简单的上下文管理器而不必使用完整的类; 我没有时间用这样的例子修改我的答案:)