【问题标题】:Connection Reset by Peer with Python module urllibPeer 使用 Python 模块 urllib 重置连接
【发布时间】:2013-07-03 15:39:28
【问题描述】:

我正在尝试使用 Python 通过 Google 自定义搜索 API 下载图像。这是我第一次,也许我在用 Python 捕捉异常时犯了一些平庸的错误。

即使我遇到一些不是 10054 Connection Reset By Peer 的错误,它也能正常工作。代码是这样的,我只是把没用的部分去掉了:

try: 
    urllib.request.urlretrieve(myUrl['link'],str(count)+'.jpg')
except URLError as e:
    print(e.reason)

有时会发生连接被对等方重置并且控制台显示此错误。

urllib.request.urlretrieve(myUrl['link'],str(count)+'.jpg')
File "C:\Python33\lib\urllib\request.py", line 210, in urlretrieve
   block = fp.read(bs)
File "C:\Python33\lib\http\client.py", line 503, in read
   return super(HTTPResponse, self).read(amt)
File "C:\Python33\lib\http\client.py", line 542, in readinto
   n = self.fp.readinto(b)
File "C:\Python33\lib\socket.py", line 297, in readinto
   return  self._sock.recv_into(b)
   ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
   Press any key to continue . . .

现在我对使该 URL 正常工作并不感兴趣,但我只想让我的循环继续进行而不是停止。我怎样才能捕捉到这个异常?

编辑:

我还注意到,有时代码会正确捕获错误并且print(e.reason) 正确输出[WinError 10054] 而不会停止循环。这很奇怪。

【问题讨论】:

  • 你知道你可以从 cmd windows 复制文本吗?无需粘贴屏幕截图。
  • 只是没想过抄袭。是否违反某些规则?在那种情况下我肯定可以编辑。
  • 不,这不违反任何规则,但是将文本作为图像发布确实没有意义。此外,它需要更多空间,并且是指向外部资源的链接(可能会消失或不可用......)
  • 好的,刚刚又抓到并编辑了问题。那应该解决它。感谢您指出。

标签: python python-3.x urllib google-custom-search


【解决方案1】:

如果您不知道确切的问题,您可以这样捕获所有异常:

try: 
    urllib.request.urlretrieve(myUrl['link'],str(count)+'.jpg')
except URLError as e:
    print(e.reason)
except KeyboardInterrupt as ki:
    raise ki
except:
    print("Unknown Error")

【讨论】:

  • 不要使用原始的except - 它会吞下不是例外的东西(比如KeyboardInterrupt)。请改用except Exception
  • 是的,原始的except 有效,但如果您使用这个更好的答案进行编辑,我会标记它并关闭案例。 :)
  • 已接受。非常感谢。
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2014-08-25
相关资源
最近更新 更多