Bu eğitimde, Python'da yerleşik olan farklı hata türleri ve istisnalar hakkında bilgi edineceksiniz. Python yorumlayıcısı hatalarla karşılaştığında yükseltilirler.
Video: Python Özel Durum İşleme
Çalıştırmaya çalıştığımızda hatalara yol açan bir programı yazarken bazı hatalar yapabiliriz. Bir python programı, işlenmeyen bir hatayla karşılaştığında hemen 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özdizimi) uyulmamasından kaynaklanan hataya sözdizimi hatası veya ayrıştırma hatası denir .
Bir örneğe bakalım:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Örnekte gösterildiği gibi, bir ok, ayrıştırıcının sözdizimi hatasıyla karşılaştığı yeri belirtir.
Burada ifadede bir kolon :
eksik olduğunu fark edebiliriz if
.
Python Mantıksal Hataları (İstisnalar)
Çalışma zamanında oluşan hatalar (sözdizimi testini geçtikten sonra), istisnalar veya mantıksal hatalar olarak adlandırılır .
Örneğin, var olmayan bir dosyayı (okumak için) FileNotFoundError
açmaya çalıştığımızda ( ), bir sayıyı sıfıra bölmeye ( ZeroDivisionError
) veya var olmayan bir modülü içe aktarmaya çalıştığımızda ( ) ortaya çıkarlar ImportError
.
Bu tür çalışma zamanı hataları meydana geldiğinde, Python bir istisna nesnesi oluşturur. Düzgün bir şekilde ele alınmazsa, bu hatanın neden oluştuğuyla ilgili bazı ayrıntılarla birlikte bu hataya bir geri bildirim yazdırır.
Python'un bu hataları nasıl ele aldığına bakalım:
>>> 1 / 0 Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in FileNotFoundError: (Errno 2) No such file or directory: 'imaginary.txt'
Python Yerleşik İstisnaları
Yasadışı işlemler istisnalara neden olabilir. Python'da, karşılık gelen hatalar meydana geldiğinde ortaya çıkan birçok yerleşik istisna vardır. Yerleşik local()
işlevi kullanarak tüm yerleşik istisnaları aşağıdaki gibi görüntüleyebiliriz:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
yerleşik istisnalar, işlevler ve özniteliklerden oluşan bir modül döndürür. dir
bu nitelikleri dizeler olarak listelememize izin verir.
Python programlamadaki yaygın yerleşik istisnaların bazıları ve bunlara neden olan hatalar aşağıda listelenmiştir:
İstisna | Hatanın Nedeni |
---|---|
AssertionError | Bir assert ifade başarısız olduğunda oluşturulur. |
AttributeError | Öznitelik ataması veya referans başarısız olduğunda yükseltilir. |
EOFError | input() İşlev dosya sonu durumuna ulaştığında yükseltilir . |
FloatingPointError | Bir kayan nokta işlemi başarısız olduğunda yükseltilir. |
GeneratorExit | Bir jeneratörün close() yöntemi çağrıldığında yükseltin . |
ImportError | İçe aktarılan modül bulunamadığında yükseltilir. |
IndexError | Bir dizinin dizini aralık dışında olduğunda yükseltilir. |
KeyError | Sözlükte bir anahtar bulunamadığında yükseltilir. |
KeyboardInterrupt | Kullanıcı kesme tuşuna ( Ctrl+C veya Delete ) bastığında yükseltilir . |
MemoryError | Bir işlemin belleği yetersiz kaldığında yükseltilir. |
NameError | Yerel veya genel kapsamda bir değişken bulunmadığında yükseltilir. |
NotImplementedError | Soyut yöntemlerle oluşturulmuştur. |
OSError | Sistem çalışması sistemle ilgili hataya neden olduğunda yükselir. |
OverflowError | Bir aritmetik işlemin sonucu gösterilemeyecek kadar büyük olduğunda yükseltilir. |
ReferenceError | Çöp toplanan bir referansa erişmek için zayıf bir referans proxy kullanıldığında yükseltilir. |
RuntimeError | Bir hata başka bir kategoriye girmediğinde ortaya çıkar. |
StopIteration | next() Yineleyici tarafından döndürülecek başka öğe olmadığını belirtmek için işlev tarafından yükseltilmiştir . |
SyntaxError | Sözdizimi hatasıyla karşılaşıldığında ayrıştırıcı tarafından oluşturulur. |
IndentationError | Yanlış girinti olduğunda yükseltilir. |
TabError | Girinti tutarsız sekmelerden ve boşluklardan oluştuğunda yükseltilir. |
SystemError | Tercüman dahili bir hata tespit ettiğinde yükseltilir. |
SystemExit | İşleve göre yükseltildi sys.exit() . |
TypeError | Yanlış türde bir nesneye bir işlev veya işlem uygulandığında yükseltilir. |
UnboundLocalError | Bir işlev veya yöntemdeki yerel bir değişkene referans yapıldığında, ancak bu değişkene hiçbir değer bağlı olmadığında yükseltilir. |
UnicodeError | Unicode ile ilgili bir kodlama veya kod çözme hatası oluştuğunda oluşturulur. |
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 bağımsız değişken aldığında ortaya çıkar. |
ZeroDivisionError | Bölme veya modulo işleminin ikinci işleneni sıfır olduğunda yükseltilir. |
Gerekirse, Python'da kendi istisnalarımızı da tanımlayabiliriz. Bunlar hakkında daha fazla bilgi edinmek için Python Kullanıcı Tanımlı İstisnalar sayfasını ziyaret edin.
Python'daki bu yerleşik ve kullanıcı tanımlı istisnaları try
, except
ve finally
ifadelerini kullanarak halledebiliriz . Onlar hakkında daha fazla bilgi edinmek için, Python try ve son olarak ifadeleri ziyaret edin.