try:
int("abc")
except Exception:
print("A")
except ValueError:
print("B")Bu kod çalıştığında ne olur?
- a"B" yazdırılır, çünkü ValueError daha spesifik bir istisna tipidir ve Python her zaman önce en spesifik except bloğunu eşleştirir
- bPython, daha spesifik bir except bloğu daha genel olandan sonra geldiği için tanım anında SyntaxError fırlatır
- c"A" yazdırılır: eşleşen ilk except bloğu (Exception) işi yapar, bu yüzden aşağıdaki ValueError bloğu erişilemez hale gelir ama kendisi hata değildir✓
- dHem "A" hem "B" yazdırılır, çünkü Python fırlatılan istisnanın tipiyle eşleşen her except bloğunu, önceki eşleşmeler fark etmeksizin kaynak sırasına göre bir kez çalıştırarak değerlendirir
Açıklama:except blokları yukarıdan aşağıya denenir ve tipi (isinstance/issubclass ile) eşleşen ilk blok kazanır — yalnızca bir tanesi çalışır. ValueError, Exception'ın alt sınıfı olduğu için ilk blok onu yakalar ve "A" yazdırılır; ikinci blok ölü kod haline gelir. Python bu sıralama sorununu SyntaxError olarak algılamaz (yalnızca çıplak
except: en sonda olmak zorundadır).