Python中处理socket错误Errno 10060的try/except语句

2 投票
2 回答
5731 浏览
提问于 2025-04-18 03:47

我有一个Python 2.7的脚本,它的功能是从数据库中打开和抓取多个网址,并从网页中提取一些信息。这个代码运行起来可能需要长达8个小时,因为我处理的是多个网站。

每隔一段时间(大约1到2小时),我会随机遇到一个错误信息:IOError: [Errno socket error] [Errno 10060],这个错误是在尝试打开网址时出现的。

IOError: [Errno socket error] [Errno 10060] A connection attempt
failed because the connected party did not properly respond after a
period of time, or established connection failed because connected
host has failed to respond

我尝试通过在打开网址的操作之间加上2秒的暂停(使用time.sleep(2))来避免这个错误,但我还是会遇到这个问题。这个错误似乎和我尝试打开的网址无关。

我在考虑用一个try/except语句来防止我的脚本崩溃。
如果出现了socket错误,脚本会暂停大约20秒,然后再尝试打开网址。如果网址成功打开,就继续执行脚本。我使用urlopen()来打开这些网址。

2 个回答

0

因为这种情况非常少见,通常每小时才会发生一次,所以你可以考虑是你的网络连接出了问题。你需要的代码是:

import time
for url in urls:
    while True:
        try:
            response = urllib2.urlopen(url)
            #Do stuff
        except :
            time.sleep(20)
        else :
            #stops the inner loop if there is no error
            break
1

因为你的代码出现了一个 IOError 错误,试着运行这段代码,不过要把你出错的那一行替换成 raise

try:
    raise IOError
except IOError:
    time.sleep(20)
    pass
else:
    break

撰写回答