对于瞬态错误和永久错误,是否存在标准Python异常的分类?

时间:2015-10-13 20:50:15

标签: python-3.x error-handling

在我当前的项目中,我使用RPC(远程过程调用)的简单请求/回复形式进行模块通信。当且仅当新尝试可能成功时,我想自动重试失败的请求。

绝大多数错误都是永久性的,但超时和I / O错误等错误则不是。

我定义了两个自定义异常 - RPCTransientError和RPCPermanentError - 目前我将所有错误映射到这两个异常中的一个。如果有疑问,我会选择瞬态的。

我不想重新发明轮子。我的问题是:是否存在关于瞬态和永久性错误的标准例外分类的现有资源?

我使用Python 3.3+与我喜欢的新操作系统和IO相关的异常层次结构。 (PEP 3151)。不要关心以前的版本。

1 个答案:

答案 0 :(得分:0)

不,没有简单的原因可能会导致错误,而对于其他人而言可能会被视为永久性错误,具体取决于使用情况。

  

如果有疑问,我会选择短暂的。

即使您无法确定自己设计的软件中的错误,也有人会如何做出这种选择?

一种方法是仅处理最基本的子类。你说你想重试IO错误和超时;自Python 3.3起,IOError和其他一些例外socket.error已合并到OSError。因此,您只需检查OSError,它就会适用于TimeoutErrorConnectionErrorFileNotFoundError等其他子类......

您可以使用OSError.__subclasses__()查看受影响的类。试试python shell(递归执行以查找所有这些)。