Python dərs 7 -Exceptions

Hasan Jafarov
3 min readMar 9, 2020

--

Proqramda bəzən bizdən asılı olan və ya olmayan xətalar çıxa bilir. Həmçinin 0-a bölmə kimi istisna hallar runtime-da xəta verə bilir. Pythonda try except ilə bu xətaları tutub lazımi əməliyyatlar edə bilirik.Məsələn aşağıdakı koda baxaq.

print(5/0)

Bu kod bizə ZeroDivisionError: division by zero xətası verəcək. try except ilə biz bu xətanı tutub istifadəçiyə daha fərqli şəkildə məlumat verə və ya başqa əməliyyat apara bilərik. Məsələn deyək ki istəyirik bu kimi hallarda proqram bizə o-a bölmək olmaz desin. Onda bu kodu aşağıdakı kimi yaza bilərik.

try:

print(5/0)

except:

print(“0-a bölmək olmaz”)

try except ümumi şəkildə aşağıdakı kimi yazılır.

try:

kodlar

except error1:

error1 xetası baş verəndə isleyecek hisse

except error2:

error2 xetası baş verəndə isleyecek hisse

finally:

Butun hallarda calisacaq kodlar

Aşağıdakı koda baxaq.

try:

a=5

b=0

print(a+”test”)#TypeError

print(a/b)#ZeroDivisionError

except TypeError:

print(“String ve int toplana bilməz”)

except ZeroDivisionError:

print(“0-a bölmək olmaz”)

Kod çalışanda String ve int toplana bilməz yazılacaq. Çünki TypeError baş verdiyi üçün kod except TypeError hissəsinə keçir və onu çalışdırır.

try:

a=5

b=0

print(a/b)#ZeroDivisionError

print(a+”test”)#TypeError

except TypeError:

print(“String ve int toplana bilməz”)

except ZeroDivisionError:

print(“0-a bölmək olmaz”)

Bu kod isə 0-a bölmək olmaz deyəcək.

Bütün xətalar BaseException klasından törəyib. Ümumiyyətlə isə məsəlçün 0-a bölmə xətası ZeroDivisionError bir neçə klasın alt klasıdır. Yəni ZeroDivisionError ilə tuttduğumuz xətanı ArithmeticError, Exception və BaseException ilə də tuta bilərik. Base və child xətaların ən çox işlədilənləri bu şəkildədir. Bunlar built-in yəni pythonla gələn xətalardır.

BaseException

+ — SystemExit

+ — KeyboardInterrupt

+ — Exception

+ — StopIteration

+ — StopAsyncIteration

+ — ArithmeticError

| + — FloatingPointError

| + — OverflowError

| + — ZeroDivisionError

+ — ImportError

| + — ModuleNotFoundError

+ — LookupError

| + — IndexError

| + — KeyError

+ — OSError

+ — ValueError

Aşağıdakı koda baxaq.

try:

a=5

b=0

print(a+”test”)#TypeError

print(a/b)#ZeroDivisionError

except BaseException:

print(“BaseException”)

except TypeError:

print(“String ve int toplana bilməz”)

except ZeroDivisionError:

print(“0-a bölmək olmaz”)

Bu kodu işlətdikdə ekrana BaseException yazdıracaq.Bir başqa koda baxaq.

try:

a=5

b=0

print(a+”test”)#TypeError

print(a/b)#ZeroDivisionError

except ArithmeticError:

print(“ArithmeticError”)

except Exception:

print(“Exception”)

except ZeroDivisionError:

print(“0-a bölmək olmaz”)

except BaseException:

print(“BaseException”)

except TypeError:

print(“String ve int toplana bilməz”)

Bu kod işləyəndə Exception yazdıracaq.

Xətanı bu şəkildə də yazdıra bilərik.

try:

a=5

b=0

print(a/b)#ZeroDivisionError

except ZeroDivisionError as ex:

print(“Sistem xətası:”,ex)

result: Sistem xətası: divided by zero

try:

a=5

b=0

print(a/b)#ZeroDivisionError

except ZeroDivisionError as ex:

print(“Sistem xətası:”,ex)

finally:

print(“final”)

result:

Sistem xətası: divided by zero

final

Bu xətalardan başqa özümüz də xəta olmasını istəyə bilərik. Tutaq ki mənfi ədəd daxil edəndə xəta verilməsini istəyirik.Bu halda biz raise istifadə edəcəyik.

while True:

a=int(input(“Eded daxil edin:”))

if a<0:

raise ValueError(“Menfi eded daxil etmek olmaz”)

Bu xətanı da belə tuta bilərik.

try:

while True:

a=int(input(“Eded daxil edin:”))

if a<0:

raise ValueError(“Menfi eded daxil etmek olmaz”)

except ValueError as ex:

print(ex)

Bu xətalardan başqa özümüz yeni xəta tipi də yarada bilərik. Bu zaman bizim yazdığımız yeni xəta klasımız Exception klasından törəməlidir. Tutaq ki test üçün sadə bir myexception klasımız yazaq.

class MyException(Exception):

def __init__(self):

self.code = 999999

self.message=”Bu exception test üçün yaradılıb”

def __str__(self):

return self.message

try:

while True:

a=int(input(“Eded daxil edin:”))

if a<0:

raise MyException()

except MyException as ex:

print(ex)

MyException klasımızı Exception klasından törətdik. Sonra raise ilə bu exceptionumuzu yaratdıq.try catch ilə öz yaratdığımız xətanı tutduq və ekrana yazdırdıq.

--

--

No responses yet