>>> myexc = "Mój łańcuch znaków wyjątku"
>>> try:
...    raise myexc
... except myexc:
...    print 'przechwycony'
...
przechwycony


>>> raise myexc
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
Mój łańcuch znaków wyjątku


>>> myexc = "Mój łańcuch znaków wyjątku"
>>> try:
       raise myexc
    except myexc:
       print 'przechwycony'

Warning (from warnings module):
   File "__main__", line 2
DeprecationWarning: raising a string exception is deprecated
przechwycony


# Plik classexc.py

# -*- coding: utf-8 -*-
class General: pass
class Specific1(General): pass
class Specific2(General): pass

def raiser0( ):
   X = General( )                            # Zgłoszenie instancji klasy nadrzędnej
   raise X

def raiser1( ):
   X = Specific1( )                          # Zgłoszenie instancji klasy podrzędnej
   raise X

def raiser2( ):
   X = Specific2( )                          # Zgłoszenie instancji innej klasy podrzędnej
   raise X

for func in (raiser0, raiser1, raiser2):
   try:
      func( )
   except General:                           # Dopasowanie General lub którejś z jej podklas
      import sys
      print 'przechwycono:', sys.exc_info( )[0]

C:\python> python classexc.py
przechwycono: __main__.General
przechwycono: __main__.Specific1
przechwycono: __main__.Specific2


class General(Exception): pass
class Specific1(General): pass
class Specific2(General): pass


# Plik stringexc.py

# -*- coding: utf-8 -*-
General = 'general'
Specific1 = 'specific1'
Specific2 = 'specific2'

def raiser0( ): raise General
def raiser1( ): raise Specific1
def raiser2( ): raise Specific2

for func in (raiser0, raiser1, raiser2):
   try:
      func( )
   except (General, Specific1, Specific2):   # Przechwycenie dowolnego
      import sys
      print 'przechwycono:', sys.exc_info( )[0]

C:\python> python stringexc.py
przechwycono: general
przechwycono: specific1
przechwycono: specific2


# Plik mathlib.py

# -*- coding: utf-8 -*-
divzero = 'Błąd dzielenia przez zero w bibliotece'
oflow = 'Błąd nadmiaru w bibliotece'
...
def func( ):
   ...
   raise divzero


# Plik client.py

# -*- coding: utf-8 -*-
import mathlib
...
try:
   mathlib.func(...)
except (mathlib.divzero, mathlib.oflow):
   ...zgłoszenie i poradzenie sobie z wyjątkiem...


# Plik mathlib.py

# -*- coding: utf-8 -*-
divzero = 'Błąd dzielenia przez zero w bibliotece'
oflow = 'Błąd nadmiaru w bibliotece'
uflow = 'Błąd niedomiaru w bibliotece'


# Plik client.py

try:
   mathlib.func(...)
except (mathlib.divzero, mathlib.oflow, mathlib.uflow):
   ...zgłoszenie i poradzenie sobie z wyjątkiem...


# Plik client.py

try:
   mathlib.func(...)
except:                                      # Przechwytywanie tutaj wszystkiego
   ...zgłoszenie i poradzenie sobie z wyjątkiem...


# Plik mathlib.py

class NumErr(Exception): pass
class Divzero(NumErr): pass
class Oflow(NumErr): pass
...
def func( ):
   ...
   raise DivZero( )


# Plik client.py

import mathlib
...
try:
   mathlib.func(...)
except mathlib.NumErr:
   ...zgłoszenie i poradzenie sobie z wyjątkiem...


# Plik mathlib.py

...
class Uflow(NumErr): pass


>>> import exceptions
>>> help(exceptions)
...pominięto wiele tekstu...


try:
   action( )
except StandardError:
   ...obsługa błędów Pythona...
except:
   ...obsługa wyjątków użytkownika...
else:
   ...obsługa przypadków bez błędów...


>>> class MyBad: pass
>>> raise MyBad( )
Traceback (most recent call last):
   File "<pyshell#13>", line 1, in <module>
      raise MyBad( )
MyBad: <__main__.MyBad instance at 0x00BB5468>


>>> class MyBad:
...    def __repr__(self):
...       return "Przepraszam -- mój błąd!"
...
>>> raise MyBad( )
Traceback (most recent call last):
   File "<pyshell#28>", line 1, in <module>
      raise MyBad( )
MyBad: Przepraszam -- mój błąd!


>>> class MyBad(Exception): pass
>>> raise MyBad( )

Traceback (most recent call last):
   File "<pyshell#18>", line 1, in <module>
      raise MyBad( )
MyBad

>>> class MyBad(Exception): pass
>>> raise MyBad('patrz', 'na', 'życie', 'z', 'humorem')

Traceback (most recent call last):
   File "<pyshell#22>", line 1, in <module>
      raise MyBad('patrz', 'na', 'życie', 'z', 'humorem')
MyBad: ('patrz', 'na', 'życie', 'z', 'humorem')


>>> class FormatError:
...    def __init__(self, line, file):
...       self.line = line
...       self.file = file
...
>>> def parser( ):
...    # Kiedy znaleziony zostanie błąd
...    raise FormatError(42, file='spam.txt')
...
>>> try:
...    parser( )
... except FormatError, X:
...    print 'Błąd w', X.file, X.line
...
Błąd w spam.txt 42


>>> formatError = 'formatError'
>>> def parser( ):
...    # Kiedy znaleziony zostanie błąd
...    raise formatError, {'wiersz':42, 'plik':'spam.txt'}
...
>>> try:
...    parser( )
... except formatError, X:
...    print 'Błąd w', X['plik'], X['wiersz']
...
Błąd w spam.txt 42


class FormatError:
   def __init__(self, line, file):
      self.line = line
      self.file = file
   def logerror(self):
      log = open('formaterror.txt', 'a')
      print >> log, 'Błąd w', self.file, self.line

def parser( ):
   raise FormatError(40, 'spam.txt')

try:
   parser( )
except FormatError, exc:
   exc.logerror( )


formatError = "formatError"

def logerror(line, file):
   log = open('formaterror.txt', 'a')
   print >> log, 'Błąd w', file, line

def parser( ):
   raise formatError, (41, 'spam.txt', logerror)

try:
   parser( )
except formatError, data:
   data[2](data[0], data[1])                 # Lub po prostu: logerror( )


raise łańcuch_znaków                         # Dopasowuje except z tym samym obiektem łańcucha znaków
raise łańcuch_znaków, dane                   # Przekazuje opcjonalne dane dodatkowe (domyślnie=None)
raise instancja                              # To samo co raise instancja.__class__, instancja
raise klasa, instancja                       # Dopasowuje except z tą klasą lub jej klasą nadrzędną
raise                                        # Ponownie zgłasza bieżący wyjątek


raise klasa                                  # To samo co: raise klasa( )
raise klasa, argument                        # To samo co: raise klasa(argument)
raise klasa, (argument, argument, ...)       # To samo co: raise klasa(argument, argument, ...)


raise KeyError( )                            # Normalna forma: zgłasza instancję
raise KeyError, KeyError( )                  # Klasa, instancja: wykorzystuje instancję
raise KeyError                               # Klasa: instancja zostanie wygenerowana
raise KeyError, "zła mielonka"               # Klasa, argument: instancja zostanie wygenerowana


try:
   ...
except KeyError, X:
   ...
