2017-08-15 4 views
0

Ich benutze die Anfragen Bibliothek für Python und ich möchte den Code weiter, wenn dieser ('Connection aborted.', gaierror(-2, 'Name or service not known')) Fehler auftritt. Aus irgendeinem Grund wird mein try catch ignoriert und der Fehler führt dazu, dass die Anwendung trotzdem beendet wird.Python weiter auf Gaierror mit der Anfragen Bibliothek

Mein Code:

try: 
    self.doSomething(); 
except requests.exceptions.ConnectionError as e: 
    self.logger.error("A connection error occured."); 
    self.logger.error(str(e) + "\n"); 
except Exception as e: 
    self.logger.error("An error occured."); 
    self.logger.error(str(e) + "\n"); 
+0

Wenn Sie nur doSomething aufrufen, ohne den try/except, Was ist die Rückverfolgung? – Wyrmwood

Antwort

1

Wenn der Fehler ein socket.gaierror ist, die eine Unterklasse von OSError ist, die eine Unterklasse von Exception ist, dann ist die except Exception Klausel ausgeführt werden soll.

Try/except ist ein mächtiges Werkzeug in Python, aber wenn es nicht sorgfältig verwendet wird, kann es leicht Fehler verstecken. Manchmal ist es am besten, das try/except zu entfernen und das vollständige Traceback zu lesen. Ein anderer Ansatz, der ziemlich gut funktioniert, ist das vollständige Traceback zu protokollieren, leider gibt es für den Python-Neuling allgegenwärtige Beispiele dafür, die falsch gemacht wurden. Um die vollständige Rückverfolgung zu erhalten, müssen Sie entweder entfernen Sie den Try/außer, oder verwenden Sie

import traceback 

try: 
    risky_call() 
except Exception: 
    print(traceback.print_exc()) 

Oder wenn Sie einen Logger

konfiguriert
import logging 

try: 
    risky_call() 
except Exception: 
    logging.exception('') 
+0

Ich bearbeitet den Code, wenn der Gaierror der "A conference error occured" aufgetreten ist. wird angezeigt, also muss es die Anforderungen sein. exceptions.ConnectionError. In jedem Fall sollte der Fehler behoben werden und die Anwendung sollte nicht richtig beendet werden? – inControl

+0

Kann nicht wirklich sagen, ohne den gesamten Traceback zu sehen - entfernen Sie das try/except und aktualisieren Sie den Post mit dem Traceback. Druckzeichenfolge (e) ist nicht ausreichend. – Wyrmwood

+0

Das Entfernen des try/exception behoben mein Problem, ich war dumm, es gab tatsächlich einige fehlerhafte Code im Block außer. Danke – inControl

Verwandte Themen