2010-06-07 7 views
8

fehlgeschlagen ist gibt es trotzdem zu zeigen, warum ein "Versuch" fehlgeschlagen, und übersprungen zu "außer", ohne alle möglichen Fehler von Hand schreiben, und ohne das Programm zu beenden?Wie zu zeigen, warum "try" in Python

Beispiel:

try: 
    1/0 
except: 
    someway to show 
    "Traceback (most recent call last): 
     File "<pyshell#0>", line 1, in <module> 
     1/0 
    ZeroDivisionError: integer division or modulo by zero" 

Ich möchte nicht if:print error 1, elif: print error 2, elif: etc... tun. Ich möchte den Fehler sehen, die try gezeigt hatte, würde es nicht gewesen

+1

Halb OT: Unspezifische ' außer Klauseln sind fast immer eine schlechte Idee. Sie sollten immer angeben, welche Exceptions Sie abfangen möchten, damit Sie nicht versehentlich etwas kaputt machen, wenn eine unerwartete Exception auftritt, zB eine "KeyboardInterruptException", die Sie dann nicht korrekt behandeln. –

Antwort

10

Versuchen:

>>> try: 
...  1/0 
... except Exception, e: 
... print e 
... 
integer division or modulo by zero 

Es gibt andere syntaktische Varianten, zum Beispiel:

>>> try: 
...  1/0 
... except Exception as e: 
... print e 
... 
integer division or modulo by zero 

Weitere Informationen finden Sie in der zu finden errors tutorial.

+1

wow. Ich scheitere wirklich. Vielen Dank! – calccrypto

+0

Wenn Sie die Exception erneut auslösen möchten (zB Ausführung stoppen usw.), verwenden Sie 'raise e' oder nur' raise'. – detly

7

ich traceback oft verwenden solche Ausnahme anmelden Stderr einloggen oder zeigen:

import traceback 
import sys 

try: 
    print 1/0 
except Exception: 
    s = traceback.format_exc() 
    serr = "there were errors:\n%s\n" % (s) 
    sys.stderr.write(serr) 

Ausgabe Informationen über Linie zeigen wird, ist Quelle, wo Ausnahme aufgetreten:

there were errors: 
Traceback (most recent call last): 
    File "c:\test\ex.py", line 5, in <module> 
    print 1/0 
ZeroDivisionError: integer division or modulo by zero 
+2

Von http://www.python.org/dev/peps/pep-0008/: "Wenn Sie Ausnahmen erfassen, erwähnen Sie, wann immer möglich, spezifische Ausnahmen, anstatt eine nackte 'except:' Klausel zu verwenden. [...] A bare ' außer: 'clause fängt SystemExit- und KeyboardInterrupt-Exceptions ab, macht es schwieriger, ein Programm mit Control-C zu unterbrechen und kann andere Probleme verschleiern. Wenn Sie alle Exceptions abfangen wollen, die Programmfehler signalisieren, verwenden Sie' exception Exception: '. " – Walter

+0

OK. 'Exception' zu 'except' hinzugefügt. –

Verwandte Themen