Python - İleri Seviye Python

Try-Except

Yayın tarihi :01-Ara-21
Bölüm kodlarını ve/veya veri setlerini indir.
def bolme(x,y):
    return x/y

Python'da yazılmış bir kod bloğunda hatalar meydana gelebilir. Hata sonucunda da program çalışmayı durduracaktır. 2 hata türü olabilir, sözdizimi hataları ve mantıksal hatalar(istisnalar)

  • Söz dizimi hataları, kod çalışması yaparken de gördüğümüz "SyntaxErrors" adı altında çıkan hatalardır.
  • Mantıksal hatalar(İstinalar) ise,  bir sayı 0' a bölündüğünde hata verir, eğer sizin kod satırınız normal seyrinde işlerken bu sonucu elde ederse hata verecektir veya her zaman açılan bir dosya o anda açılamadığı zaman yine hata verecektir ve bu da programın akışını bozacaktır. 

Yukarıda saymış olduğum iki hata türünün programı durdurmasına engel olmak için try except blokları kullanılır. try bloğunda eğer hata alırsa except bloğunda olan kod ile devam eder ve programın akışı bozulmamış olur.

Kod dizimi:

try:
    #kod sayırları
except:
    #kod sayırları

Örnek-1

def bolme(x,y):
    return x/y
bolme(2,1)

Çıktı:

2.0
bolme(2,0)

Çıktı:

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-6-ced5e05a327f> in <module>
----> 1 bolme(2,0)

<ipython-input-4-356c5c234640> in bolme(x, y)
      1 def bolme(x,y):
----> 2     return x/y

ZeroDivisionError: division by zero

Yukarıdaki örnekte bolme(2,1) fonksiyonu çalışıyor ama bolme(2,0) dediğimizde ZeroDivisionError hatası aldık ve program sonrasında gelen tüm kodlar sonlanacaktır. Bunu önlemek için;

def bolme(x,y):
    try:
        return x/y
    except:
        print("programda hata meydana geldiğinden bölme işlemi yapılamadı.")
bolme(2,1)

Çıktı:

2.0
bolme(2,0)

Çıktı:

programda hata meydana geldiğinden bölme işlemi yapılamadı.

Tüm hata kodlarını bulmak için;

print(dir(locals()["__builtins__"]))

Çıktı:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 
'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 
'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError',
 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', '
FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 
'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 
'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 
'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 
'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 
'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 
'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 
'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',
 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', '
WindowsError', 'ZeroDivisionError', ......]

Yaptığımız bolme fonksiyonunda y değerine 0 girileceği önceden bilinirse ve ona göre önlem alınmak istenirse hata yakalama işlemi yapılabilir. Bunun için söz dizimi:

try:
    #kod sayırları
except ZeroDivisionError:
    #kod sayırları
except AttributeError:
    #kod sayırları
else:
    #kod satırları - Eğer ZeroDivisionError veya AttributeError hatası alınmadıysa bu alan çallışır.

Örnek-2:

def bolme(x,y):
    try:
        result=x/y
    except ZeroDivisionError:
        print("y değeri 0 olamaz")
    else:
        print("x/y : {}".format(result))

bolme(2,1)
print("##########")
bolme(2,0)
print("##########")

Çıktı:

x/y : 2.0
##########
y değeri 0 olamaz
##########

Python kodunda try bloğu da çalışsa hata alıp except bloğu da çalışsa bir değerin kesinlikle dönmesi de sağlanabilir. Bunun için ek olarak finally bloğu kullanılır. Söz dizimi:

try:
    #kod sayırları
except ZeroDivisionError:
    #kod sayırları
else:
    #kod satırları - Eğer ZeroDivisionError hatası alınmadıysa bu alan çallışır.
finally:
    #3 bloktan hangisinin çalıştığı önemli değil bu alan herzaman çalışır.

Örnek-3

def bolme(x,y):
    try:
        result=x/y
    except ZeroDivisionError:
        print("y değeri 0 olamaz")
    except AttributeError:
        print("AttributeError hatası alındı")
    else:
        print("x/y : {}".format(result))
    finally:
        print("iyi çalışmalar...")
    
bolme(2,1)
print("##########")
bolme(2,0)
print("##########")

Çıktı:

x/y : 2.0
iyi çalışmalar...
##########
y değeri 0 olamaz
iyi çalışmalar...
##########
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.