连续执行脚本时python脚本库错误

Posted

技术标签:

【中文标题】连续执行脚本时python脚本库错误【英文标题】:python script library error while continuously executing script 【发布时间】:2017-09-15 10:25:15 【问题描述】:

运行 python 脚本从谷歌静态地图图像中获取像素点时出错。我从Google maps - how to get building's polygon coordinates from address?得到了python脚本 我使用python2.7执行脚本 最初,当我运行脚本时,我没有收到任何错误,但在连续运行 3-4 小时后,我收到以下错误

Traceback (most recent call last):
File "pyscript.py", line 19, in <module>
imgBuildings = io.imread(urlBuildings)
File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 60, in i
with file_or_url_context(fname) as fname:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/skimage/io/util.py", line 29, in
u = urlopen(resource_name)
File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 435, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 473, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

因为我是 python 新手,我不知道如何修复它?这是某种缓存问题吗? 非常感谢您的帮助。

【问题讨论】:

我最近在处理从外部源下载的地理位置数据时发现了很多。该代码没有足够的弹性来处理您想要的下载问题。您必须将代码放入尝试中,除非您每天都有机会获得网络丢弃并丢失一些数据包。这很可能是正在发生的一切。在这种情况下,urllib2 下载返回异常。这就是您看到的错误。 【参考方案1】:

我经常看到这个问题,这是由于间歇性网络丢失错误造成的。使用 try/catch 异常处理有一个递归技巧,可以避免这种情况发生,即使您的网络中断了几个小时。

解释:您尝试下载。如果失败,下载将在 1/4,1/2,1,2,4,8,... 秒后再次尝试递归重试,最多等待 1 小时以获取下一次下载。例如,如果您在一家公司工作,网络可能会在周末出现故障,但您的代码只会轮询 1 小时(最长),然后在网络修复后再次恢复。

import time

def recursiveBuildingGetter( urlBuildings, waitTime=0.25 ):

  try:
    imgBuildings = io.imread(urlBuildings)
  except:
    print "Warning: Failure at time %f secs for %s" % ( waitTime, str(urlBuildings) )
    waitTime = waitTime * 2.0

    if ( waitTime >  3600.0 ):
      waitTime = 3600.0
    time.sleep(waitTime)

    imgBuildings = recursiveBuildingGetter( urlBuilding, waitTime )
    if ( waitTime == 3600.0 ):
      waitTime = 0.25

  return imgBuildings

【讨论】:

非常感谢埃蒙肯尼。这似乎奏效了。再次感谢。 很高兴它起作用了,它的好处是您可以将它用于任何类型的 url 批量下载。

以上是关于连续执行脚本时python脚本库错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Java 中运行多个 python 脚本

谷歌应用脚​​本抛出错误

使用Perl执行Python脚本时,为什么不会出现语法错误?

python脚本连续发送QQ邮件

在 Python 脚本中使用 sudo

python+selenium 在执行测试脚本时,遇到错误如何能继续执行下去而不停止