【发布时间】:2011-06-04 03:54:55
【问题描述】:
我有一段 Python 代码似乎在概率上会导致错误,因为它正在访问服务器,有时该服务器有 500 内部服务器错误。我想继续尝试,直到我没有收到错误。我的解决方案是:
while True:
try:
#code with possible error
except:
continue
else:
#the rest of the code
break
这对我来说似乎是一种黑客行为。有没有更 Pythonic 的方式来做到这一点?
【问题讨论】:
-
Err...当远程服务器死机时会发生什么?这会消耗 100% 的 CPU 内核吗?
-
continue 应该在 else 和 break in except。是不是笔误?
-
@aand:没有。如果出现异常,他想再试一次(阅读:
continue),但是如果没有出现异常,他想对一些事情进行(由评论勾勒出来)并摆脱对循环的奇怪滥用。 (else不发生异常就执行,是不是少了一块?) -
警告词:您应该添加某种程度的保护以防止持续失败,例如休眠或最大尝试限制。否则,正如@user9876 所指出的,您的进程将无限期地消耗 CPU。
-
对于它的价值,同样要求的例子不那么可怕。我正在尝试创建一个具有新名称的目录,因此我将在基数上附加一个数字并增加该数字,直到成功创建该目录。我只会捕获 AlreadyExists 错误。除非我的文件夹有无限的目录,否则这显然迟早会成功。
标签: python error-handling