Kullanıcı tanımlı istisnalar artık dizge olmakla sınırlı değiller; sınıf da
olabilirler. Bu mekanizmayı kullanarak genişletilebilir istisna hiyerarşileri
yaratılabilir.
raise deyimi için iki yeni biçem mevcut:
raise Sinif, gercekleme
raise gercekleme
İlk biçemde gercekleme Sinifa ait bir gerçekleme
olmalıdır. İkinci biçem ise şunun kısaltmasıdır:
raise gercekleme.__class__, gercekleme
Bir except bloğu hem sınıflar hem de dizgeleri içerebilir.
Bir except bloğu içindeki sınıf eğer aynı sınıf veya bir
temel sınıf ise istisna ile uyumludur. Türetilmiş sınıf içeren bir
except bloğu temel sınıf ile uyumlu değildir. Örneğin
aşağıdaki program B, C, D
çıktısını o sırayla verir:
class B:
pass
class C(B):
pass
class D(C):
pass
for c in [B, C, D]:
try:
raise c()
except D:
print "D"
except C:
print "C"
except B:
print "B"
Eğer except blokları ters sırayla yazılmış olsalardı
(except B başta olacak şekilde) çıktı
B, B, B olacaktı; çünkü uyan ilk except B
bloğu tetiklenecekti.
Ele alınmamış sınıf istisnası için bir ileti yazılacağı zaman, önce sınıf
adı yazılır, ardından iki nokta üst üste ve bir boşluk ve son olarak da
gerçeklemenin yerleşik str() işlevinden geri döndürülen
dizgenin karşılığı yazılır.