1412 Stimmen

Wie druckt man eine Ausnahme in Python?

try:
    something here
except:
    print('the whatever error occurred.')

Wie kann ich den Fehler/die Ausnahme in meinem except: blockieren?

71voto

Nick Dandoulakis Punkte 41402

Für den Fall, dass Sie Fehlerstrings übergeben wollen, hier ein Beispiel aus Fehler und Ausnahmen (Python 2.6)

>>> try:
...    raise Exception('spam', 'eggs')
... except Exception as inst:
...    print type(inst)     # the exception instance
...    print inst.args      # arguments stored in .args
...    print inst           # __str__ allows args to printed directly
...    x, y = inst          # __getitem__ allows args to be unpacked directly
...    print 'x =', x
...    print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs

70voto

Liam Roberts Punkte 484

In Erweiterung der "except Exception as e:"-Lösung gibt es hier einen netten One-Liner, der einige zusätzliche Informationen wie die Art des Fehlers und den Ort, an dem er aufgetreten ist, enthält.

try:
    1/0
except Exception as e:
    print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")

Output:

ZeroDivisionError at line 48 of /Users/.../script.py: division by zero

68voto

GinTonic Punkte 770

Man hat ziemlich viel Kontrolle darüber, welche Informationen aus dem Traceback beim Abfangen von Ausnahmen angezeigt/protokolliert werden.

Der Code

with open("not_existing_file.txt", 'r') as text:
    pass

würde den folgenden Traceback erzeugen:

Traceback (most recent call last):
  File "exception_checks.py", line 19, in <module>
    with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'

Drucken/Protokollieren des vollständigen Tracebacks

Wie bereits von anderen erwähnt, können Sie den gesamten Traceback mit dem Traceback-Modul abfangen:

import traceback
try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    traceback.print_exc()

Dies ergibt die folgende Ausgabe:

Traceback (most recent call last):
  File "exception_checks.py", line 19, in <module>
    with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'

Das Gleiche können Sie mit Hilfe der Protokollierung erreichen:

try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    logger.error(exception, exc_info=True)

Output:

__main__: 2020-05-27 12:10:47-ERROR- [Errno 2] No such file or directory: 'not_existing_file.txt'
Traceback (most recent call last):
  File "exception_checks.py", line 27, in <module>
    with open("not_existing_file.txt", 'r') as text:
FileNotFoundError: [Errno 2] No such file or directory: 'not_existing_file.txt'

Nur Fehlername/Fehlermeldung drucken/protokollieren

Möglicherweise sind Sie nicht am gesamten Traceback interessiert, sondern nur an den wichtigsten Informationen, wie z. B. dem Namen der Ausnahme und der Ausnahmemeldung, verwenden:

try:
    with open("not_existing_file.txt", 'r') as text:
        pass
except Exception as exception:
    print("Exception: {}".format(type(exception).__name__))
    print("Exception message: {}".format(exception))

Output:

Exception: FileNotFoundError
Exception message: [Errno 2] No such file or directory: 'not_existing_file.txt'

37voto

Raj Maddheshiya Punkte 41

Versuchen Sie dies

try:

    print("Hare Krishna!")

except Exception as er:

    print(er)

4voto

whatnick Punkte 5286

One-Liner-Fehler können mit Assert-Anweisungen ausgelöst werden, wenn Sie dies wünschen. Dies wird Ihnen helfen, statisch korrigierbaren Code zu schreiben und Fehler frühzeitig zu erkennen.

assert type(A) is type(""), "requires a string"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X