2016-04-21 6 views
0

Ich versuche, ein triviales Objekt (nur Attribute/Werte) zu serialisieren, Ich habe diese Methode in meiner Klasse.Python Json Serialisierung versuchen/außer

def to_json(self,client): 
    service=self._service 
    path="jsonphp/" 
    path+=client 
    if not os.path.exists(path): 
     os.makedirs(path) 
    with cdd(path): 
     print os.getcwd() 
     path=service+".json" 
     with open(path, 'w') as outfile: 
     try: 
      json.dump(self.__dict__, outfile) 
     except: 
      print "serialization failed" 

der ganze Teil vor dem Versuch/außer ist, in den richtigen Ordner zu navigieren. Es scheint reibungslos zu funktionieren. Aber wenn ich diese Methode verwende, drucke es immer: serialization failed von meinem except sogar meine file.json wird erstellt und die Daten sind korrekt darin gespeichert: {"_attr1": "On", "_attr2": "On", "_attr3": "Off"} Ich dachte, der except Block wurde nur besucht, wenn ein Fehler aufgetreten war.

Meine Fragen sind die folgenden: Ist das das "normale" Verhalten von try/except?

Wenn nicht, wie Informationen über die Ausnahme erhalten, die meine Ausnahme fängt?

Könnte es eine Ausnahme sein von irgendwo oben im Code (bevor ich to_json() anrufen), die dort eingefangen ist?

+0

Einrückungsproblem? –

+0

Ich glaube nicht. Du meinst irgendwo vorher diesen Funktionsaufruf? – pwnsauce

Antwort

0

Ich finde, dass dies eher eine Ausnahmebehandlungsfrage als alles andere ist. Da Sie während Ihrer Programmierarbeiten wahrscheinlich Ausnahmen haben, ist es wichtig, sie richtig zu behandeln. Selten sollten die Ausnahmen so weit gefasst sein, und wenn Sie nicht verstehen, warum es eine Ausnahme gibt, sollten Sie die Ausnahme drucken. Dies gibt Ihnen die Möglichkeit, nach der Ausnahme zu suchen und festzustellen, was die Ursache Ihres Problems ist, und wird Ihnen sehr dabei helfen, Python weiter zu lernen. Dies druckt die genaue Ausnahme der Konsole

except Exception as e: 
      print "serialization failed", e 

und ermöglicht es Ihnen, um Hilfe zu suchen oder fragen:

Ihre ändern, außer zu lesen.

+1

danke! Mit der Ausnahme ausgedruckt macht es mehr Sinne! Ich werde an der Handhabung von Ausnahmen besser arbeiten. Das Problem war ein Attribut, das nicht serialisierbar ist. – pwnsauce

+0

Ausgezeichnet. Lesen Sie hierzu, wie Sie jede bekannte Ausnahme mit Namen behandeln können, und verwenden Sie die Exception Exception, um Dinge zu erfassen, an die Sie noch nicht gedacht haben, und diese dann zu behandeln, wenn sie auftauchen. Viel Glück! – Chris