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
我想编写一个上下文管理器,它可以吞下给定的异常并继续。
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