需要python异常处理帮助吗

2024-10-01 07:22:56 发布

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

以下是我当前使用的代码:

^{pr 1}$

我遇到的问题是,我真正关心的例外情况是,在提出请求时,这种情况偶尔会发生:

^{pr2}$

这并不是正确的错误,我想可能是Python2.x的urllib/urllib2,而我使用的是python3,我认为是这样urllib.error.URLErroriirc。不管怎样,我知道除了URLError我可以做,它应该可以工作(尽管我想知道我是否需要这样做)urllib.error.URLError相反,因为这是我的报告),但我如何测试,以确保它是因为104。我希望它不断地重试请求,直到它得到它,或者至少尝试它一个指定的次数,我如何才能做到最优雅?在

从我所能发现的错误104是因为我的本地路由器无法处理请求和发狂,我猜是因为它不能处理这么快的请求?如果有人对什么原因有进一步的了解,那也会有帮助,但我不太担心。在


Tags: 代码报告错误情况errorprurllib2urllib
2条回答

看看http://docs.python.org/py3k/library/urllib.error.html

查看异常的reason属性后,您应该能够确定:

  1. reason属性是socket.error实例吗?在
  2. 如果是的话,这个错误的值是一个2元组,第一个元素对应于errno.ECONNRESET?在

首先,没有理由在新代码中使用urllib,建议使用urllib2。在

据我所知,只有在出现错误104时才想重试。在python中通常是这样做的:

import time, urllib.request, urllib2.error
RETRY_DELAY = 2

# build req here
# ...

for x in range(10): # Always limit number of retries
  try:
    resp = urllib.request.urlopen(req)
  except urllib.error.URLError:
    if e.reason[0] == 104: # Will throw TypeError if error is local, but we probably don't care
      time.sleep(RETRY_DELAY)
    else:
      raise # re-raise any other error
  else:
    break # We've got resp sucessfully, stop iteration

相关问题 更多 >