gpt4 book ai didi

python - 在引发的异常中执行自定义代码

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:39 26 4
gpt4 key购买 nike

我有几种方法可以引发我的自定义异常。引发异常后,我需要处理它,比如将日志消息发送到控制台并将其保存到数据库中。

我正在考虑帖子标题中描述的疯狂解决方法 - 我可以将带有日志记录和数据库保存的自定义代码移动到自定义异常的 __init__ 方法中,因此每次引发异常时,我只会让它沉默,因为所有需要的东西都会在异常初始化时完成。

我知道异常 __init__ 本身会引发另一个异常,但也可以处理 :)

有人试过吗?

为什么这是个疯狂的想法? :)

-

编辑:

我知道这有点疯狂,我只是想知道您的意见。我将尝试附上我想要实现的目标:

我正在处理远程数据,当通过网络与其他服务器通信时,可能会出现一些问题,每个问题都在其他地方:1. 网络错误 - 创建连接时。2. HTTP 错误(404、500 等)- 连接后;3.远程服务器也会返回一些其他错误

由于这些问题出现在几个不同的地方,我创建了我的自定义异常:

class CustomException(Exception):
pass

当我能捕获它们时,到处举起它,例如:

try:
conn.open(url)
except HTTPException as e:
raise CustomException('http')

这只是一个伪例子。

这个 CustomException 在更高的地方被捕获,几乎在每个地方我都以同样的方式处理它,即:

try:
place.populate()
except CustomException as e:
handle_exception(e)
return False

handle_exception 将有关问题的信息保存到数据库,还做其他事情,例如保存place 的对象状态和访问日期,但总是更新相同的事情。

所以我只是想知道将 handle_exception 代码放在 __init__ 中是否真的是个疯狂的想法,因为每次引发异常时都会这样做。

感谢您的意见!

最佳答案

如果你要做这样的事情,正如其他人所说,这是一个有问题的目标,我建议通过 logging.Logger 路由消息。在您的异常的 __init__ 中,然后附加 logging.Handlers用于记录到数据库、打印到控制台或任何你想要的。然后您的图书馆的用户可以以更简单、更标准化的方式控制(和扩展)系统。

关于python - 在引发的异常中执行自定义代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17427252/

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