Python: 捕获异常并重试代码

0 投票
3 回答
1717 浏览
提问于 2025-04-16 20:01

我有这段代码:

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答