gpt4 book ai didi

python - 当且仅当稍后没有通过 try 和 except 捕获异常时才记录异常

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:11 25 4
gpt4 key购买 nike

我有一个类,我在其中记录错误并提出它们。但是,我有不同的函数预计会出现该错误。

现在,即使这些函数正确地排除了错误,它仍然会被记录。这会导致日志文件困惑,其中可以看到多个冲突条目。例如:

import logging
logging.basicConfig(filename = "./log")
logger = logging.getLogger()
logger.setLevel(logging.INFO)

class Foo:

def __init__(self):
pass

def foo_error(self):
logger.error("You have done something very stupid!")
raise RuntimeError("You have done something very stupid!")

def foo_except(self):
try:
self.foo_error()
except RuntimeError as error:
logger.info("It was not so stupid after all!")


Foo = Foo()
Foo.foo_except()

这里,两条消息都显示在“./log”中。最好,如果稍后捕获到第一条错误日志消息,我想抑制它。

我在其他地方没有看到答案。也许我做事的方式暗示了糟糕的设计。有什么想法吗?

最佳答案

你不能真正询问Python稍后是否会捕获异常。因此,您唯一的选择是仅在知道异常是否被捕获后才记录。

一种可能的解决方案(尽管我不确定这是否适用于您的环境):

import logging
logging.basicConfig(filename = "./log")
logger = logging.getLogger()

class Foo:

def __init__(self):
pass

def foo_error(self):
# logger.error("You have done something very stupid!")
raise RuntimeError("You have done something very stupid!")

def foo_except(self):
try:
self.foo_error()
except RuntimeError as error:
logger.warning("It was not so stupid after all!")

try:
Foo = Foo()
Foo.foo_except()
Foo.foo_error()
except Exception as exc:
if isinstance(exc, RuntimeError):
logger.error("%s", exc)
raise

关于python - 当且仅当稍后没有通过 try 和 except 捕获异常时才记录异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224664/

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