2014-03-25 10 views
5

Mit dem requests Python lib ich eine GET-Anfrage zu machen, und Timeout Ausnahmen behandeln (wie auch andere Ausnahmen ich nicht hier zeigen) wieSockel-Timeout: Zeitüberschreitung Python-Anfragen

import requests 
timeout1=20 
timeout2=40 

try: 
    #first attempt 
    resp = requests.get(base_url+resource, params=payload, headers=headers, 
    timeout=timeout1) 
except requests.exceptions.Timeout: 
    #timed out, retry once 
    try: 
     resp = requests.get(base_url+resource, params=payload, headers=headers, 
     timeout=timeout2) 
     return resp.json() 
    except requests.exceptions.RequestException as e: 
     #Still failed; return error code 
     return -1 

Dies funktioniert in Ordnung die meiste Zeit, aber manchmal mein Programm nur komplett mit dem Fehler socket.timeout: timed out, anstatt die requests.exceptions.Timeout zu werfen und dieses wird erwischt und behandelt.

Warum verhält sich die Anfrage-Lib so? Wie soll ich damit umgehen?

+0

Haben Sie die Antwort für dieses Problem gefunden? – user2801184

+0

Hier ist die Antwort: versuchen Sie: data = sock.recv (256) außer socket.timeout: data = "KEINE ANTWORT" – user2801184

Antwort

0

Antwort:

try: 
    data = sock.recv(256) 
except socket.timeout: 
    data="NO RESPONSE" 

Es wird nicht verlassen!