在断开网络连接时绕过Python IOError?

2024-09-24 16:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,有人知道我怎么通过IOError吗? 基本上我有python脚本,它试图从我的网站上获取数据 通过urllib。 但当我断开网络时,我得到了:

IOError:[Errno socket error][Errno 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机没有响应而建立连接失败

我怎么能告诉python-继续尝试直到我连接上?在

for example:

currtokenurl = "http://www.example.com/heady"

f = urllib.urlopen(currtokenurl)
currtoken = f.read()

谢谢。在


Tags: 网络脚本comhttpfor网站examplewww
2条回答

把它放到一个循环中,这样你就可以捕捉到错误并重试。许多错误不应该重试,所以创建一个您喜欢的错误列表。在

import time
import errno

retry_this = [errno.ETIMEOUT,]

currtokenurl = "http://www.example.com/heady"

while True:
    try:
        f = urllib.urlopen(currtokenurl)
        break
    except IOError, e:
        if e.errno in retry_this:
            time.sleep(10)
        else:
            raise
currtoken = f.read()

可能是远程端没有连接,所以您可能需要一种方法来限制while循环并完全放弃。在

使用try/except捕获IOError:

import urllib
import time

def read_page(url):
  try:
    f = urllib.urlopen(url)
    return f.read()
  except IOError as e:
    return None

while True:
  f = read_page("http://www.example.com/heady")
  if f is None:
    print "reading again"
    time.sleep(5)  # try again in 5 seconds
  else:
    break

相关问题 更多 >