Python: 捕获异常并重试代码
我有这段代码:
import imaplib, re
import os
import time
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login("ddd", "dddd")
while(True):
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
print unreadCount
if int(unreadCount) > 10:
print "restarting..."
time.sleep(50)
这段代码有时候会断开连接,导致它停止工作。我该怎么做才能在每次出错的时候捕捉到这个错误,并重新启动代码呢?
谢谢!
3 个回答
0
使用 try ... except
try:
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
if int(unreadCount) > 10:
print "restarting..."
time.sleep(50)
except Exception:
pass
0
试试这个:
import imaplib, re
import os
import time
for n in range(3):
try:
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login("ddd", "dddd")
while(True):
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
print unreadCount
if int(unreadCount) > 10:
print "restarting..."
time.sleep(50)
break
except Exception, e:
if n == 2:
print >>sys.stderr, "Failure During processing, restarting..."
print >>sys.stderr, e
你可以把n设置成你想允许的尝试次数。
编辑: 嗯,经过进一步查看,我发现我对你的代码理解得有点偏差。我已经修改并修正了我的版本。你需要调整一下你的while循环,因为我不太确定你具体想要做什么。
编辑 2: 因为你需要重新连接并再试一次,我把连接的部分放到了try块里面。
4
import imaplib, re
import os
import time
while True:
try:
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login("ddd", "dddd")
while True :
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
print unreadCount
if int(unreadCount) > 10:
print "restarting..."
time.sleep(50)
except HypotheticalException:
pass
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。