在我当前的项目中,我使用RPC(远程过程调用)的简单请求/回复形式进行模块通信。当且仅当新尝试可能成功时,我想自动重试失败的请求。
绝大多数错误都是永久性的,但超时和I / O错误等错误则不是。
我定义了两个自定义异常 - RPCTransientError和RPCPermanentError - 目前我将所有错误映射到这两个异常中的一个。如果有疑问,我会选择瞬态的。
我不想重新发明轮子。我的问题是:是否存在关于瞬态和永久性错误的标准例外分类的现有资源?
我使用Python 3.3+与我喜欢的新操作系统和IO相关的异常层次结构。 (PEP 3151)。不要关心以前的版本。
答案 0 :(得分:0)
不,没有简单的原因可能会导致错误,而对于其他人而言可能会被视为永久性错误,具体取决于使用情况。
如果有疑问,我会选择短暂的。
即使您无法确定自己设计的软件中的错误,也有人会如何做出这种选择?
一种方法是仅处理最基本的子类。你说你想重试IO错误和超时;自Python 3.3起,IOError
和其他一些例外socket.error
已合并到OSError
。因此,您只需检查OSError
,它就会适用于TimeoutError
,ConnectionError
,FileNotFoundError
等其他子类......
您可以使用OSError.__subclasses__()
查看受影响的类。试试python shell(递归执行以查找所有这些)。