Exception Handling, try, except, finally

Kategori: Python , 04 Eylül 2019 , JanFranco


Python'da hata kontrolleri için try, except ve finally anahtar kelimelerini kullanırız. Ayrıntılı olarak Java bölümünde görmüştük fakat tekrar açıklayayım, hata doğurabilecek kod blokları try bloğunda yazılır. Hata olması durumunda çalışacak kod bloğu except bloğundaki kodlardır. Hata olsun veya olmasın her durumda çalışacak kodlar ise finally bloğundadır. Bir örnek yapalım:


try:
    a = int(input("num 1: "))
    b = int(input("num 2: "))
    print(a // b)
except ValueError:
    print("Please enter the inputs correctly.")
except ZeroDivisionError:
    print("A number can not be divided by zero.")
finally:
    print("I am working in all situations.")
Burada hata doğurabilecek kısımlar input() fonksiyonları ve a // b işlemidir. Kullanıcı bir sayı yerine bir harf girebilir veya kullanıcı b değerini 0 olarak atayabilir. Bu nedenle bu 3 satırı try bloğunda yazdık. İki hata oluşabilir bu hataları da except anahtar kelimesi ile birlikte belirttik. finally bloğunda da her durumda çalışacak bir print() fonksiyonu yazdık. Şimdi test edelim:


>>
num 1: 12
num 2: 4
3
I am working in all situations.

>>
num 1: 12
num 2: 0
A number can not be divided by zero.
I am working in all situations.

>>
num 1: a
Please enter the inputs correctly.
I am working in all situations.
Görüldüğü gibi hata olsun veya olmasın her durumda finally bloğu çalışmaktadır. Hata durumlarında da hata mesajları ekrana basılmaktadır.
raise anahtar kelimesi hata fırlatabiliriz:


def reverse(s):
    if type(s) != str:
        raise ValueError("Please enter a valid string.")
    else:
        return s[::-1]


print(reverse(123))
Burada string ifade yerine bir tam sayı verdik. Bu durumda konsolda şu şekilde bir mesaj alırız:


Traceback (most recent call last):
  File "C:/Users/ErenS/PycharmProjects/JFBlog/Worksheet.py", line 8, in <module>
    print(reverse(123))
  File "C:/Users/ErenS/PycharmProjects/JFBlog/Worksheet.py", line 3, in reverse
    raise ValueError("Please enter a valid string.")
ValueError: Please enter a valid string.
Python'da pass anahtar kelimesi ile hiç bir işlem yapılmayacağını belirtebiliriz:


liste = ["345", "abcd", "321abc", "14", "franco"]

for i in liste:
    try:
        i = int(i)
        print(i)
    except ValueError:
        pass
Bu kodu çalıştırdığımızda konsolda 345 ve 14 değerlerini görürürüz. Son bir örnek daha görelim:


def even(num):
    if num % 2 == 0:
        return True
    else:
        raise ValueError("Odd number!")


list_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in list_1:
    try:
        if even(i):
            print(i)
    except ValueError:
        pass
Python'daki tüm hatalar ve uyarılar:


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


Sonraki Yazı: File Operations in Python, open()
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın