try-except
einpacken.
try: eingeleitete Block ist der eigentliche Programmcode.
Ihm schließt sich ein oder mehrere except Blöcke an.except: angegeben landet jeder Fehler aus dem try-Block sofort dort.except-Blöcke angegeben, so müssen alle (bis auf den letzten) den Fehler
angeben, den sie behandeln.
try:
s = input("Zahl eingeben:")
i = int(s)
e = 5/i
print(e)
except ValueError:
print("Das war keine Zahl")
except ZeroDivisionError:
print("Das war eine 0")
except:
print("Anderer Fehler")
while True:
try:
s = input("Zahl eingeben:")
i = int(s) # hier wird ggf. die Exception geworfen
break # hier endet die Schleife
except ValueError:
pass
except ValueError as e:.print(str(e)) verwenden um die Exception auszugeben.
assert Bedingung eine Zusicherung einfordern. Ist die Bedingung falsch wird ein
AssertionError geworfen, den man in except AssertionError: behandeln kann.
while True:
try:
s = input("Zahl eingeben:")
i = int(s) # ggf. ValueError
assert i>0 # ggf. AssertionError
break # hier endet die Schleife
except ValueError:
print("Eine Zahl, Alter!")
except AssertionError:
print("Sei mal positiv!")
raise Exception("Informativer Text") kann man selbst eine Exception auslösen.
while True:
try:
s = input("Zahl eingeben:")
i = int(s) # ggf. ValueError
if i<0:
raise ValueError("zu negativ") # ValueError mit eigener Meldung
break # hier endet die Schleife
except ValueError as e:
print("Fehler", str(e))
try-except-Block kann ein finally-Block angehängt werden.finally-Block werden auf jeden Fall ausgeführt!finally-Block gleich wie ein Code-Block der nach dem try-except kommt.
try oder except-Block z.B. ein break oder return stattfindet.finally-Block wird trotzdem ausgeführt.
while True:
try:
s = input("Zahl eingeben:")
i = int(s) # ggf. ValueError
break # hier endet die Schleife
except ValueError:
print("Eine Zahl, Alter!")
finally:
print("Immer")
print("Immer") wird hier ausgeführt, egal ob ein ValueError auftritt oder nicht!
print("immer") nur bei einem Fehler ausgeführt wird, da sonst das break die Schleife beendet
while True:
try:
s = input("Zahl eingeben:")
i = int(s) # ggf. ValueError
break # hier endet die Schleife
except ValueError:
print("Eine Zahl, Alter!")
print("Immer")
finally wird meist eingesetzt um aufzuräumen: Hier schließt man offene Dateien, beendet Datenbank-Verbindungen sauber etc.
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── ImportError
│ └── ModuleNotFoundError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── MemoryError
├── NameError
│ └── UnboundLocalError
├── OSError
│ ├── BlockingIOError
│ ├── ChildProcessError
│ ├── ConnectionError
│ │ ├── BrokenPipeError
│ │ ├── ConnectionAbortedError
│ │ ├── ConnectionRefusedError
│ │ └── ConnectionResetError
│ ├── FileExistsError
│ ├── FileNotFoundError
│ ├── InterruptedError
│ ├── IsADirectoryError
│ ├── NotADirectoryError
│ ├── PermissionError
│ ├── ProcessLookupError
│ └── TimeoutError
├── ReferenceError
├── RuntimeError
│ ├── NotImplementedError
│ └── RecursionError
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning