2013-07-03 46 views
1

我试图做的是使用Python通过Google Custom Search API下载图像。这是我第一次,也许我正在做一些平庸的错误捕捉Python的异常。通过Peer使用Python模块重置连接urllib

即使当我进入一些不是10054 Connection Peer 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]而不停止循环。这很奇怪。

+2

你知道你可以从CMD窗口中复制文本?无需粘贴屏幕截图。 – mata

+0

只是没有考虑复制。这是否违反一些规则?在那种情况下我肯定可以编辑。 – sparaflAsh

+0

不,这并不违反任何规则,但将文字发布为图像确实没有意义。加上它需要更多的空间,并且是一个外部资源的链接(它可能消失或不可用......) – mata

回答

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") 
+1

不要使用原生'except' - 它会吞下并非例外的东西(如'KeyboardInterrupt')。改用'except Exception'。 – thegrinner

+0

是的,生''除了''工作,但如果你编辑这个更好的答案,我会标记它并关闭案件。 :) – sparaflAsh

+0

更好吗? – ejk314

相关问题