Я создаю скрипт Python, который просматривает мою базу данных для всех URL-адресов, а затем следует URL-адресам, чтобы найти неработающие ссылки. Этот сценарий требует использования обработки исключений для входа, когда он сталкивается с ошибкой открытия ссылки, однако он начал встречая ошибку, что я был совершенно не в состоянии написать, кроме заявления на:Catching ConnectionResetError с Python
Traceback (most recent call last):
File "exceptionerror.py", line 97, in <module>
raw_response = response.read().decode('utf8', errors='ignore')
File "/usr/lib/python3.4/http/client.py", line 512, in read
s = self._safe_read(self.length)
File "/usr/lib/python3.4/http/client.py", line 662, in _safe_read
chunk = self.fp.read(min(amt, MAXAMOUNT))
File "/usr/lib/python3.4/socket.py", line 371, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [Errno 104] Connection reset by peer
Я попытался следующее :
except SocketError as inst:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' ' + sys.exc_info()[0] + ', ' + brokenlinks
continue
И:
except ConnectionResetError as inst:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' ' + sys.exc_info()[0] + ', ' + brokenlinks
continue
И даже полное общее исключение, чтобы попытаться поймать все ошибки просто так не убивает весь сценарий:
except:
print("This link was not caught by defined exceptions: " + articlelinks[j])
continue
У меня полная потеря за то, как мой скрипт поймал эту ошибку, чтобы она могла продолжать проверять неработающие ссылки, а не жесткие сбои. Это прерывисто, поэтому я не верю, что ссылка сломана, и я чувствую, что, хотя я идентифицировал URL-адрес, просто поймал его и пропустил его, прежде чем рука обманывает, так как моя цель - правильно обрабатывать исключения. Может ли кто-нибудь посоветовать мне, как справиться с этим исключением?
Для справки, вот мой полный цикл:
for j in range(0, len(articlelinks)):
try:
req=urllib.request.Request(articlelinks[j], None, {'User-agent' : 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'})
response = urllib.request.urlopen(req)
except urllib.request.HTTPError as inst:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' ' + format(inst) + ', ' + brokenlinks
continue
except TimeoutError:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' Timeout Error, ' + brokenlinks
continue
except urllib.error.URLError as inst:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' ' + format(inst) + ', ' + brokenlinks
continue
except SocketError as inst:
brokenlinksflag = 1
brokenlinks = articlelinks[j] + ' ' + sys.exc_info()[0] + ', ' + brokenlinks
continue
except:
print("This article killed everything: " + articlelinks[j])
exit()
вы можете дать нам пример URL, который не? – taesu
http://www.zend.com/ - это URL-адрес, который прерывался с перерывами. –