Ausnahmen

In [1]:
a = 1
b = 0
a/b
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-1-b41368efa26d> in <module>()
      1 a = 1
      2 b = 0
----> 3 a/b

ZeroDivisionError: division by zero
In [2]:
a = 11
b = "2"
if a > 10:
    c = a+b
else:
    c = a*b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-5609a68bd0ae> in <module>()
      2 b = "2"
      3 if a > 10:
----> 4     c = a+b
      5 else:
      6     c = a*b

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Umgang mit Ausnahmen

In [3]:
while True:
    x = int(input("Bitte geben sie eine ganze Zahl ein: "))
    break
Bitte geben sie eine ganze Zahl ein: 5.6
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-3a0f40dc65fe> in <module>()
      1 while True:
----> 2     x = int(input("Bitte geben sie eine ganze Zahl ein: "))
      3     break

ValueError: invalid literal for int() with base 10: '5.6'
In [4]:
while True:
    try:
        x = int(input("Bitte geben sie eine ganze Zahl ein: "))
        break
    except ValueError:
        print("Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...")
Bitte geben sie eine ganze Zahl ein: 5.6
Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...
Bitte geben sie eine ganze Zahl ein: 5
In [5]:
while True:
    try:
        x = int(input("Bitte geben sie eine ganze Zahl ein: "))
        break
    except ValueError:
        print("Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...")
Bitte geben sie eine ganze Zahl ein: 5.6
Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/home/student/anaconda3/lib/python3.5/site-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
    713             try:
--> 714                 ident, reply = self.session.recv(self.stdin_socket, 0)
    715             except Exception:

/home/student/anaconda3/lib/python3.5/site-packages/jupyter_client/session.py in recv(self, socket, mode, content, copy)
    738         try:
--> 739             msg_list = socket.recv_multipart(mode, copy=copy)
    740         except zmq.ZMQError as e:

/home/student/anaconda3/lib/python3.5/site-packages/zmq/sugar/socket.py in recv_multipart(self, flags, copy, track)
    357         """
--> 358         parts = [self.recv(flags, copy=copy, track=track)]
    359         # have first part already, only loop while more to receive

zmq/backend/cython/socket.pyx in zmq.backend.cython.socket.Socket.recv (zmq/backend/cython/socket.c:6971)()

zmq/backend/cython/socket.pyx in zmq.backend.cython.socket.Socket.recv (zmq/backend/cython/socket.c:6763)()

zmq/backend/cython/socket.pyx in zmq.backend.cython.socket._recv_copy (zmq/backend/cython/socket.c:1931)()

/home/student/anaconda3/lib/python3.5/site-packages/zmq/backend/cython/checkrc.pxd in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7222)()

KeyboardInterrupt: 

During handling of the above exception, another exception occurred:

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-5-d83a4910ba17> in <module>()
      1 while True:
      2     try:
----> 3         x = int(input("Bitte geben sie eine ganze Zahl ein: "))
      4         break
      5     except ValueError:

/home/student/anaconda3/lib/python3.5/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
    687             self._parent_ident,
    688             self._parent_header,
--> 689             password=False,
    690         )
    691 

/home/student/anaconda3/lib/python3.5/site-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
    717             except KeyboardInterrupt:
    718                 # re-raise KeyboardInterrupt, to truncate traceback
--> 719                 raise KeyboardInterrupt
    720             else:
    721                 break

KeyboardInterrupt: 
In [6]:
while True:
    try:
        x = int(input("Bitte geben sie eine ganze Zahl ein: "))
        break
    except ValueError:
        print("Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...")
    except KeyboardInterrupt:
        print("eigene Unterbrechung")
        break
Bitte geben sie eine ganze Zahl ein: 5.6
Oops! Das war keine ganze Zahl! Probieren sie es nochmal ...
eigene Unterbrechung
In [7]:
f = open("myfile.txt", "r")
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-7-d17853646b31> in <module>()
----> 1 f = open("myfile.txt", "r")

FileNotFoundError: [Errno 2] No such file or directory: 'myfile.txt'
In [8]:
try:
    f = open("myfile.txt", "r")
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OSError: {}".format(err))
except ValueError:
    print("Die eingelesenen Daten können nicht in eine ganze Zahl umgewandelt werden")
except:
    print("Unerwarteter Fehler")
    raise
OSError: [Errno 2] No such file or directory: 'myfile.txt'
In [9]:
%%writefile myfile.txt
Dies ist ein testfile
mit Text in
mehreren zeilen
Writing myfile.txt
In [10]:
try:
    f = open("myfile.txt", "r")
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OSError: {}".format(err))
except ValueError:
    print("Die eingelesenen Daten können nicht in eine ganze Zahl umgewandelt werden")
except:
    print("Unerwarteter Fehler")
    raise
Die eingelesenen Daten können nicht in eine ganze Zahl umgewandelt werden
In [11]:
%%writefile myfile.txt
   10
Dies ist ein testfile
mit Text in
mehreren zeilen
Overwriting myfile.txt
In [12]:
import time
try:
    f = open("myfile.txt", "r")
    s = f.readline()
    i = int(s.strip())
    print(i)
    time.sleep(60)
except OSError as err:
    print("OSError: {}".format(err))
except ValueError:
    print("Die eingelesenen Daten können nicht in eine ganze Zahl umgewandelt werden")
except:
    print("Unerwarteter Fehler")
    raise
10
Unerwarteter Fehler
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-12-96e7b11ae27d> in <module>()
      5     i = int(s.strip())
      6     print(i)
----> 7     time.sleep(60)
      8 except OSError as err:
      9     print("OSError: {}".format(err))

KeyboardInterrupt: 

Werfen von Ausnahmen (raising exceptions)

In [13]:
raise NameError
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-13-a586bde47246> in <module>()
----> 1 raise NameError

NameError: 
In [14]:
raise NameError("Hallo Welt")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-14-7a8b3835a427> in <module>()
----> 1 raise NameError("Hallo Welt")

NameError: Hallo Welt
In [16]:
try:
    raise Exception("hallo welt", 10, dict(a=7,b=3.141))
except Exception as instance:
    print(type(instance))
    print(instance.args)
    print(instance)
    
    s,i,d = instance.args
    print("String={}".format(s))
    print("Integer={}".format(i))
    print("Dictionary={}".format(d))
<class 'Exception'>
('hallo welt', 10, {'a': 7, 'b': 3.141})
('hallo welt', 10, {'a': 7, 'b': 3.141})
String=hallo welt
Integer=10
Dictionary={'a': 7, 'b': 3.141}

Module traceback und sys

In [17]:
try:
    a = 10/0
except KeyboardInterrupt:
    print("Unterbrechung")
except:
    import traceback
    print(traceback.format_exc())
print("Nach dem try-except-Block")
Traceback (most recent call last):
  File "<ipython-input-17-e6eb355077c2>", line 2, in <module>
    a = 10/0
ZeroDivisionError: division by zero

Nach dem try-except-Block
In [18]:
try:
    a = 10/0
except KeyboardInterrupt:
    print("Unterbrechung")
except:
    raise
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-18-fe15ae1f24a2> in <module>()
      1 try:
----> 2     a = 10/0
      3 except KeyboardInterrupt:
      4     print("Unterbrechung")
      5 except:

ZeroDivisionError: division by zero
In [19]:
try:
    a = 10/0
except KeyboardInterrupt:
    print("Unterbrechung")
except:
    import sys
    t, v, tb = sys.exc_info()
    print("Ausnahme {}: {}".format(t,v))
    print("Zeile: {}".format(tb.tb_lineno))
    print("File '{}' in '{}'".format(tb.tb_frame.f_code.co_filename,tb.tb_frame.f_code.co_name))
Ausnahme <class 'ZeroDivisionError'>: division by zero
Zeile: 2
File '<ipython-input-19-90e412783743>' in '<module>'

Definieren von Aufräum-Aktionen

In [20]:
try:
    raise KeyboardInterrupt
except KeyboardInterrupt:
    print("Unterbrechung")
finally:
    print("Beenden des try-except-Blocks")
Unterbrechung
Beenden des try-except-Blocks
In [21]:
try:
    a = 10/2
    print(a)
except ValueError:
    print("ValueError")
finally:
    print("Beenden des try-except-Blocks")
5.0
Beenden des try-except-Blocks
In [22]:
def dividiere(x,y):
    try:
        result = x/y
    except ZeroDivisionError:
        print("division by zero!")
    else:
        print("Ergebnis: {}/{}={}".format(x,y,result))
    finally:
        print("Fertig")

dividiere(2,1)
dividiere(2,0)
dividiere("2","1")
Ergebnis: 2/1=2.0
Fertig
division by zero!
Fertig
Fertig
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-4708dd3e1df8> in <module>()
     11 dividiere(2,1)
     12 dividiere(2,0)
---> 13 dividiere("2","1")

<ipython-input-22-4708dd3e1df8> in dividiere(x, y)
      1 def dividiere(x,y):
      2     try:
----> 3         result = x/y
      4     except ZeroDivisionError:
      5         print("division by zero!")

TypeError: unsupported operand type(s) for /: 'str' and 'str'