4.1 Bir neçə istisnanın tutulması
Python bir neçə istisnanı işləməyi, bir neçə except
bloku və ya bir except
bloku ilə tuple istisnaları istifadə edərək həyata keçirməyə icazə verir. Hər iki yanaşmanı nəzərdən keçirək.
Bir neçə except
bloku
Müxtəlif istisna növlərini ayrı-ayrılıqda işləmək üçün bir neçə except
bloku istifadə edə bilərsiniz.
try:
# İstisna yarada biləcək kod
result = int("abc")
except ValueError:
print("Səhv: düzgün olmayan dəyər.")
except ZeroDivisionError:
print("Səhv: sıfra bölmə.")
Bir except
bloku ilə tuple istisnaları
Bir neçə istisnanı bir except
blokunda, onları tuple şəklində ötürərək idarə edə bilərsiniz.
try:
# İstisna yarada biləcək kod
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Xəta baş verdi: {e}")
except
-də NameError
istifadə as
var
ilə
İstisnaların işlənməsi zamanı except
<ExceptionType>
as
<variable>
sintaksisindən istifadə edərək istisna obyektinə müraciət edə bilərsiniz. Bu, xəta mesajı və digər atributlar kimi istisna haqqında məlumat əldə etməyə imkan verir.
try:
# NameError yarada biləcək kod
print(undeclared_variable)
except NameError as e:
print(f"Xəta baş verdi: {e}")
print(f"Xətanın növü: {type(e)}")
4.2 Səhv dəyişəninin əhatə sahəsi
İstisnanın saxlanıldığı dəyişən (e
yuxarıdakı nümunədə) yalnız öz except
blokunun daxilində əlçatandır. Blokun xaricində bu dəyişən əlçatmazdır.
try:
# NameError yarada bilən kod
print(undeclared_variable)
except NameError as e:
print(f"Xəta baş verdi: {e}")
print(f"Xəta növü: {type(e)}")
# Burada e artıq əlçatmazdır və aşağıdakı sətir NameError yaradacaq
# print(e) # NameError: name 'e' is not defined
Əgər istisnanı blokun xaricində vacib bir şey üçün istifadə etmək istəyirsinizsə, onu ayrıca bir dəyişəndə saxlamaq lazımdır. Nümunə:
exception = None
try:
# İstisna yarada bilən kod
result = int("abc")
except ValueError as e:
exception = e
print("Xəta: yanlış dəyər.")
except ZeroDivisionError as e:
exception = e
print("Xəta: sıfıra bölmə.")
print(exception)
Diqqət yetirin ki, exception
dəyişəni baş verən son istisnanı saxlayır, bu isə blokun try
xaricində sonrakı emalda faydalı ola bilər.
4.3 Xətada nə faydalı var
İstisna obyekti xəta haqqında məlumat saxlayır. İstisnanın növündən asılı olaraq obyekt müxtəlif atributlara malik ola bilər.
Əksər istisnalar üçün mövcud olan bəzi ümumi atributlar:
-
args
: İstisna yaradılarkən ötürülən arqumentləri ehtiva edən tuple. Adətən bu, xəta mesajıdır. -
message
: Xəta mesajını saxlayan string (bəzi istisnalarda). -
__str__
: İstisnanın sətir təqdimatını qaytaran metod. Bu metodprint()
funksiyası istisna obyektində istifadə edildikdə xəta üçün mətn təqdimatını əldə etmək üçün istifadə olunur.
Nümunə:
try:
# ValueError yarada bilən kod
result = int("abc")
except ValueError as e:
print(f"Xəta baş verdi: {e}")
print(f"Xətanın arqumentləri: {e.args}")
print(f"Xəta mesajı: {str(e)}")
Bir neçə istisnanı işləmə nümunəsi
try:
# Bir neçə növ istisna yarada bilən kod
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Xəta baş verdi: {e}")
print(f"Xətanın növü: {type(e)}")
print(f"Xətanın arqumentləri: {e.args}")
Əgər ValueError
və ya ZeroDivisionError
baş verərsə, o, except
bloku tərəfindən tutulacaq. İstisna haqqında məlumat e
dəyişəni vasitəsilə əlçatan olacaq. Çıxışda xətanın növü və istisnanın yaradılarkən ötürülən arqumentlər göstəriləcək.
GO TO FULL VERSION