gpt4 book ai didi

python - 如何在上下文管理器中捕获异常?

转载 作者:行者123 更新时间:2023-12-03 07:52:29 25 4
gpt4 key购买 nike

我遇到的情况是,我需要捕获一些异常(例如,在代码中,我想捕获ZeroDivisionError)并在自己的上下文管理器中处理它。我需要检查此异常的计数并在控制台中进行打印。现在,当我运行代码时,我一次捕获了ZeroDivisionError,比

Traceback (most recent call last):
File "/home/example.py", line 23, in foo
a / b
ZeroDivisionError: division by zero

Process finished with exit code 1

例如:
class ExceptionCather:
def __init__(
self,
try_counter,
exc_type=None
):
self.try_counter = try_counter

def __enter__(self):
return self

def __exit__(self, exc_type, exc, tb):
if exc_type == ZeroDivisionError:
self.try_counter += 1
if self.try_counter == 2:
print(self.try_counter)


def foo(a, b):
try_counter = 0
while True:
with ExceptionCather(try_counter):
a / b


if __name__ == '__main__':
foo(1, 0)

如何捕获错误,在控制台中进行打印并继续执行脚本?会很感激的

最佳答案

我不确定您要实现什么,但是如果要处理ZeroDivisionError,只需从True返回__exit__:

class ExceptionCather:
def __init__(
self,
try_counter,
exc_type=None
):
self.try_counter = try_counter

def __enter__(self):
return self

def __exit__(self, exc_type, exc, tb):
if exc_type == ZeroDivisionError:
self.try_counter += 1
if self.try_counter == 2:
print(self.try_counter)
return True # This will not raise `ZeroDivisonError`


def foo(a, b):
try_counter = 0
while True:
with ExceptionCather(try_counter):
a / b


if __name__ == '__main__':
foo(1, 0)

另请注意,由于您处于while循环中,因此当您按Ctrl + C停止循环时,会引发 KeyboardInterrupt,这会从 ZeroDivisonError中引发 ExceptionCatcher(因为 __exit__最后没有返回 True)。

关于python - 如何在上下文管理器中捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60765584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com