2013-07-03 2 views
1

Что я пытаюсь сделать, это загрузить изображения через API пользовательского интерфейса Google с помощью Python. Это мой первый раз, и, возможно, я делаю некоторые банальные ошибки, улавливающие исключения с Python.Сброс соединения с помощью Peer с модулем Python urllib

Все работает нормально, даже если у меня возникает некоторая ошибка, которая не является 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 работал, но я просто хочу, чтобы мой цикл продолжал идти и не останавливался. Как я могу поймать это исключение?

Edit:

Я также заметил, что иногда код правильно перехватывает ошибку и 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

Не используйте raw 'except' - он будет проглатывать вещи, которые не являются исключениями (например,' KeyboardInterrupt'). Вместо этого используйте 'except Exception'. – thegrinner

+0

Да, raw 'except' работает, но если вы отредактируете с этим лучшим ответом, я отметю его и закрою. :) – sparaflAsh

+0

Это лучше? – ejk314

Смежные вопросы