2009-11-11 18 views
35

In Python, wenn ich eine binäre Datei öffnen, die nicht vorhanden ist, tritt das Programm mit einem Fehler und druckt:Ausnahmemeldung (Python 2.6)

Traceback (most recent call last): 
    File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
    line 4, in <module> 
    pkl_file = open('monitor.dat', 'rb') 
    IOError: [Errno 2] No such file or directory: 'monitor.dat' 

Ich kann damit umgehen mit ‚try-except‘ , wie:

try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except Exception: 
    print 'No such file or directory' 

Wie konnte ich, in gefangen Ausnahme, die folgende Zeile drucken?

So würde das Programm nicht beenden.

Antwort

91

Dies gibt die Meldung Ausnahme:

except Exception, e: 
    print "Couldn't do it: %s" % e 

Das wird die ganze Zurückverfolgungs zeigen:

import traceback 

# ... 

except Exception, e: 
    traceback.print_exc() 

Aber Sie könnten nicht Exception fangen wollen. Je schmaler Sie Ihren Fang machen können, desto besser, in der Regel. So können Sie versuchen:

except IOError, e: 

stattdessen. Auch auf das Thema Ihrer Ausnahmebehandlung verengen, wenn Sie besorgt über fehlende Dateien sind, setzen Sie dann die try-except nur um das offene:

try: 
    pkl_file = open('monitor.dat', 'rb') 
except IOError, e: 
    print 'No such file or directory: %s' % e 

monitoring_pickle = pickle.load(pkl_file) 
pkl_file.close() 
+0

Das hat nicht für mich funktioniert. Jochens Antwort hat es getan. – Josh

+0

@Josh Diese Antwort sagt viel dasselbe wie diese. –

9

Python das traceback Modul hat.

import traceback 
try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except IOError: 
    traceback.print_exc() 
6

Danke für alle.

das ist, was ich brauchte :)

import traceback 

try: 
    # boom 
except Exception: 
    print traceback.format_exc() 
+8

Sie sollten keine Antwort erstellen, wenn Sie einen Kommentar abgeben. Akzeptiere eine der Antworten, um deine Helfer zu belohnen! –

+0

Bitte nehmen Sie sich die Zeit, Ned B's Antwort noch einmal anzusehen. Es gibt einige wichtige Punkte, die er macht, über das Lösen Ihres unmittelbaren Problems hinaus. – PaulMcG

+0

Danke, Paul, aber ich habe das Gefühl, dass wir das Ende der Aktivität in dieser Frage erreicht haben ... –

22

Wenn Sie das Ausnahmeobjekt durch die Ausnahme weitergegeben erfassen mögen, ist es am besten mit dem neuen Format in Python 2.6 eingeführt zu starten (die beide zur Zeit unterstützt), weil es ist der einzige Weg, es 3.

in Python zu tun, und das ist:

try: 
    ... 
except IOError as e: 
    ... 

Beispiel:

try: 
    pkfile = open('monitor.dat', 'rb') 
except IOError as e: 
    print 'Exception error is: %s' % e 

Eine detaillierte Übersicht finden Sie unter What's New in Python 2.6 documentation.

+2

Hilfreich, aber das hat die Frage nicht beantwortet. Vielleicht besser als Kommentar? – Josh