python 在上下文管理器中吞下异常并继续

python swallow exception in context manager and go on

我想编写一个上下文管理器,它可以吞下给定的异常并继续。

class swallow_exceptions(object):
    def __init__(self, exceptions=[]):
        self.allowed_exceptions = exceptions

    def __enter__(self):
        return self

    def __exit__(self, exception_type, exception_value, traceback):
        if exception_type in self.allowed_exceptions:
            print(f"{exception_type.__name__} swallowed!")
            return True

它按预期吞下了 ZeroDivisonError,但随后由于“__exit__”方法中的 return True 语句而从 ContextManager 终止。

with swallow_exceptions([ZeroDivisionError]):
   error_1 = 1 / 0
   error_2 = float("String") # should raise ValueError!

有没有办法捕获异常然后继续?我试过 'yield True' 但它没有打印任何东西就终止了。

在异常返回到上下文管理器后,无法继续 运行 with 语句的主体。上下文管理器可以阻止异常进一步冒泡,但它不能做更多。

您可能想要在多个单独的 with 语句中使用上下文管理器:

suppress = swallow_exceptions([ZeroDivisionError])

with suppress:
    1 / 0              # this exception is suppressed

with suppress:
    float("String")  # this one is not