Python Hata Yakalama ve Yerleşik İstisnalar
Bu öğreticide, Python’da yerleşik olarak bulunan farklı türdeki hatalar ve istisnalar hakkında bilgi edineceksiniz. Python yorumlayıcısı hatalarla karşılaştığında ortaya çıkarlar.
Python İstisna İşleme
Bir programı yazarken çalıştırmaya çalıştığımızda hatalara yol açan bazı kodlamalar yapabiliriz. Bir python programı, işlenmeyen bir hatayla karşılaştığı anda sona erer. Bu hatalar genel olarak iki sınıfa ayrılabilir:
- Sözdizimi hataları
- Mantıksal hatalar (İstisnalar)
Python Sözdizimi Hataları
Dilin doğru yapısına (sözdizimine) uyulmamasından kaynaklanan hataya sözdizimi hatası veya ayrıştırma hatası denir.
Bir örneğe bakalım:
1 2 3 4 5 | >>> if a < 3 File "<interactive input>", line 1 if a < 3 ^ SyntaxError: invalid syntax |
Örnekte gösterildiği gibi bir ok sözdizimi hatasının nerede olduğunu gösterir.
Bu ifadede if yapısı için gerekli olan üst üste iki noktanın (:) eksik olduğunu görüyoruz.
Python Mantıksal Hataları (İstisnalar)
Sözdizimi testini geçtikten sonra oluşan hatalara istisnalar veya mantıksal hatalar denir.
Örneğin var olmayan bir dosyayı açmaya çalışmak, bir sayıyı sıfıra bölmeye çalışmak veya var olmayan bir modülü içe aktarmaya çalışmak bu hatalara sebep olur.
Bu tür hatalar meydana geldiğinde, Python bir istisna nesnesi oluşturur. Bu hatanın neden oluştuğuna ilişkin bazı ayrıntılarla birlikte bu hataya ilişkin bir geri izleme yazdırır.
Python’un bu hataları nasıl ele aldığına bakalım:
1 2 3 4 5 6 7 8 9 10 11 | >>> 1 / 0 Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> ZeroDivisionError: division by zero >>> open("hayali_dosya.txt") Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'hayali_dosya.txt' |
Python Yerleşik İstisnalar
Hatalı işlemler istisnalar doğurabilir. Python’da ilgili hatalar oluştuğunda ortaya çıkan birçok yerleşik istisna vardır. Yerleşik işlevi kullanarak tüm yerleşik istisnaları aşağıdaki gibi görebiliriz:
1 | print(dir(locals()['__builtins__'])) |
locals()[‘__builtins__’] yerleşik istisnalar, işlevler ve niteliklerden oluşan bir modül döndürür. dir bu öznitelikleri diziler olarak listelememize izin verir.
Python programlamada yaygın yerleşik istisnalardan bazıları ve bunlara neden olan hata aşağıda listelenmiştir:
İstisna | Hata Nedeni |
---|---|
AssertionError | Bir assert işlemi başarısız olduğunda ortaya çıkar. |
AttributeError | Nitelik ataması veya referansı başarısız olduğunda ortaya çıkar. |
EOFError | raw_input() veya input() fonksiyonundan girdi olmadığında ve dosyanın sonuna ulaşıldığında ortaya çıkar. |
FloatingPointError | Float hesaplama başarısız olduğunda oluşur. |
StandardError | StopIteration ve SystemExit dışındaki tüm yerleşik istisnalar için temel sınıftır. |
ImportError | İçe aktarılan modül bulunamadığında ortaya çıkar. |
IndexError | Bir sıralı yapıda (list veya tüple gibi) indeks bulunmadığı zaman ortaya çıkar. |
KeyError | Sözlükte bir anahtar bulunmadığında ortaya çıkar. |
KeyboardInterrupt | Kullanıcı program yürütmeyi kestiğinde (genellikle Ctrl + C tuşlarına basıldığında) ortaya çıkar. |
MemoryError | Hafıza ile ilgili problemlerde ortaya çıkar. |
NameError | Yerel veya global kapsamda bir değişken bulunmadığında ortaya çıkar. |
NotImplementedError | Kalıtımlı bir sınıfta uygulanması gereken soyut (abstract) bir yöntem gerçekte uygulanmadığında ortaya çıkar. |
OSError | Sistem ilgili hata olduğunda ortaya çıkar. |
OverflowError | Bir hesaplama, sayısal bir tür için maksimum sınırı aştığında oluşur. |
ReferenceError | Atanmamış bir değişken kullanıldığında ortaya çıkar. |
RuntimeError | Oluşturulan bir hata herhangi bir kategoriye girmediğinde oluşur. |
StopIteration | Bir iterasyonun next() metodu bir nesneyi göstermediğinde oluşur. |
SyntaxError | Sözdizimi hatasıyla karşılaşıldığında ortaya çıkar. |
IndentationError | Yanlış girinti olduğunda ortaya çıkar. |
TabError | Girinti tutarsız sekmeler ve boşluklardan oluştuğunda ortaya çıkar. |
SystemError | Yorumlayıcı dahili hata algıladığında tetiklenir. |
SystemExit | sys.exit() fonksiyonu tarafından oluşur. |
TypeError | Yanlış türde bir nesneye bir işlev veya işlem uygulandığında ortaya çıkar. |
UnboundLocalError | Bir fonksiyon veya metotta yerel bir değişkene erişmeye çalışırken ortaya çıkar, ancak bu değişkene değer atanmamıştır. |
UnicodeError | Unicode ile ilgili bir kodlama veya kod çözme hatası oluştuğunda ortaya çıkar. |
UnicodeEncodeError | Kodlama sırasında Unicode ile ilgili bir hata oluştuğunda ortaya çıkar. |
UnicodeDecodeError | Kod çözme sırasında Unicode ile ilgili bir hata oluştuğunda ortaya çıkar. |
UnicodeTranslateError | Çeviri sırasında Unicode ile ilgili bir hata oluştuğunda ortaya çıkar. |
ValueError | Bir işlev, doğru türde ancak uygun olmayan değerde bir argüman aldığında ortaya çıkar. |
ZeroDivisionError | Sıfıra bölme veya mod alma işleminde ortaya çıkar. |
Gerekirse Python’da kendi istisnalarımızı da tanımlayabiliriz. Python’da bu yerleşik ve kullanıcı tanımlı istisnaları ve deyimlerini try kullanarak işleyebiliriz.