SSLError (Read operation timed out) in Python-requests
Habe ich ein python-API-Skript und mein Skript manchmal wird beendet auf dieser Linie trotz der Verwendung von try/except
. Hier ist der code:
try:
r = requests.post(URL, data=params, headers=headers, timeout=self.request_timeout)
try:
response = r.json()
except Exception, e:
message = "ERROR_0104! Unexpected error occured. The error is: "
message += str(e)
print message
aux_func.write_log(message)
return 'Switch'
except requests.exceptions.RequestException:
print "Exception occurred on 'API requests post' procedure."
counter += 1
continue
...
Tritt der Fehler in der zweiten Zeile des oben gezeigten code. Dies ist der Fehler:
r = requests.post(URL, data=params, headers=headers, timeout=self.request_timeout)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 394, in send
r.content
File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 679, in content
self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 616, in generate
decode_content=True):
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/response.py", line 236, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/response.py", line 183, in read
data = self._fp.read(amt)
File "/usr/lib/python2.7/httplib.py", line 543, in read
return self._read_chunked(amt)
File "/usr/lib/python2.7/httplib.py", line 585, in _read_chunked
line = self.fp.readline(_MAXLINE + 1)
File "/usr/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
File "/usr/lib/python2.7/ssl.py", line 305, in recv
return self.read(buflen)
File "/usr/lib/python2.7/ssl.py", line 224, in read
return self._sslobj.read(len)
ssl.SSLError: The read operation timed out
Ich nehme an, so etwas innerhalb der Requests-Modul ist die Ursache HIERFÜR, aber ich weiß nicht, was.
InformationsquelleAutor rrlamichhane | 2014-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den read-Vorgang hat das Zeitlimit überschritten, als es sagt.
Es mal aus, allerdings mit einem
ssl.SSLError
. Dies ist nicht, was Ihrexcept
ist ansteckend. Wenn Sie möchten, zu fangen und zu wiederholen, die Sie brauchen, um die richtigen Fehler.try: r = requests.post(URL, data=params, headers=headers, timeout=self.request_timeout) except request.exceptions.RequestException: ... except Exception, e: ...
Danke für den Tipp!Es wäre sehr hilfreich, zu schreiben, eine Antwort mit code, der besagt, was die Recht Fehler zu fangen ist. Er ist offensichtlich verwirrt.
Ein wenig zu spät? Weitere Leute kommen hier nach googlen dieser spezifische Fehler (mich eingeschlossen) und verpassen eine mögliche Lösung.
Wie fangen Sie die ssl.SSLError ? Was ist die richtige Art und Weise zu erfassen, diese Ausnahme ?
Hat die offensichtliche Art und Weise nicht funktionieren?
import ssl
,except ssl.SSLError
?InformationsquelleAutor Veedrac
except Exception, e
funktioniert nicht mit >= Python 3Sie haben, um es
except Exception as e
InformationsquelleAutor
Ich sah, dass gab es einige Verwirrung hier, was die Lösung ist, weil der Mangel an genügend details. Ich stellte die Antwort auf das Kommentar der top-post, aber die Formatierung ist nicht so toll in den Kommentaren und ich werde nach einer Antwort hier korrekt formatiert.
Das problem, wie Veedrac erwähnt hat ist, dass ich nicht das abfangen aller möglichen Ausnahmen in den code gepostet, dass ich in der Frage. Mein code nur Fänge "Anfragen.Ausnahmen.RequestException", und jede andere Ausnahme führt dazu, die Codes, beenden Sie abrupt.
Statt, ich werde es neu schreiben, damit der code wie folgt:
Alles, was ich Tat, war fügen Sie eine zusätzliche generische exception catcher am Ende, die fangen alle anderen werden vermisst Ausnahmen.
Ich hoffe, das hilft.
Dank.
InformationsquelleAutor rrlamichhane