Исключение, которое приводит к сбою моей программы, таково:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/response.py", line 397, in _error_catcher
yield
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/response.py", line 479, in read
data = self._fp.read(amt)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 447, in read
n = self.readinto(b)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 491, in readinto
n = self.fp.readinto(b)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [Errno 54] Connection reset by peer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/models.py", line 750, in generate
for chunk in self.raw.stream(chunk_size, decode_content=True):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/response.py", line 531, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/response.py", line 496, in read
raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/response.py", line 415, in _error_catcher
raise ProtocolError('Connection broken: %r' % e, e)
urllib3.exceptions.ProtocolError: ("Connection broken: ConnectionResetError(54, 'Connection reset by peer')", ConnectionResetError(54, 'Connection reset by peer'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/me/Documents/CBB/scrape.py", line 301, in <module>
main([2018, 11, 6, 2018, 12, 1])
File "/Users/me/Documents/CBB/scrape.py", line 207, in main
get_range(int(argv[0]), int(argv[1]), int(argv[2]), int(argv[3]), int(argv[4]), int(argv[5]))
File "/Users/me/Documents/CBB/scrape.py", line 250, in get_range
rg.get_bsc()
File "/Users/me/Documents/CBB/scrape.py", line 103, in get_bsc
self.get_pbp()
File "/Users/me/Documents/CBB/scrape.py", line 120, in get_pbp
soup = self.scraper.open_page(url=url)
File "/Users/me/Documents/CBB/scrape_util.py", line 209, in open_page
response = self.session.get(url, proxies={'https': ip, 'http': ip}, headers=headers)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py", line 686, in send
r.content
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/models.py", line 828, in content
self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b''
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/models.py", line 753, in generate
raise ChunkedEncodingError(e)
requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(54, 'Connection reset by peer')", ConnectionResetError(54, 'Connection reset by peer'))
Я запускаю webscraper из места, где Inte rnet иногда отключается на секунду или две одновременно, и в этих случаях я ожидаю получить какое-то исключение. Мой подход к этим исключениям состоит в том, чтобы подождать пару секунд и повторить попытку доступа к странице. Для большинства типов исключений, вызывающих эту проблему, я могу легко except
исключить и повторить попытку. Однако всякий раз, когда это приводит к ConnectionResetError
, программа падает из-за исключений, возникающих внутри обработчиков исключений. Я не знаю, как это исправить, потому что ни один из кодов, вызывающих исключения, не написан мной. Я не выдвигаю никаких исключений, и я хотел бы подавить все это, чтобы я мог повторить попытку. Есть ли способ игнорировать эти сбои исключений внутри исключения?
Я уже исключаю ConnectionResetError
с и ухожу от них как можно быстрее, что не работает. Я использую модуль запросов, чтобы открыть эти страницы.