6.1 Məqsədli şəkildə xəta yaratmaq
Python-da siz məqsədli şəkildə xətalar yarada bilərsiniz, bunu etmək üçün raise
operatorundan istifadə edin. Bu sizə proqramınızda xəta və ya yanlış vəziyyətin baş verməsini göstərməyə imkan verir. Gəlin raise
operatorunun istifadəsinin müxtəlif yollarını və xətaların qablaşdırılmasını nəzərdən keçirək.
Standart xətaların yaradılması
Ümumi sintaksisi belə görünür:
raise xəta
Siz Exception
, TypeError
və digər standart xətaları əlavə mesajlar ilə yarada bilərsiniz.
Nümunə: raise Exception
def check_number(value):
if value < 0:
raise Exception("Bağışlayın, sıfırdan aşağı rəqəmlər olmaz")
try:
check_number(-5)
except Exception as e:
print(f"Xəta tutuldu: {e}")
Bu nümunədə, əgər dəyər sıfırdan aşağıdırsa, "Bağışlayın, sıfırdan aşağı rəqəmlər olmaz"
mesajı ilə Exception
yaradılır.
Nümunə: raise TypeError
def check_integer(value):
if not isinstance(value, int):
raise TypeError("Yalnız tam ədədlərə icazə var")
try:
check_integer("string")
except TypeError as e:
print(f"Xəta tutuldu: {e}")
Bu nümunədə, əgər dəyər tam ədəd deyilsə, "Yalnız tam ədədlərə icazə var"
mesajı ilə TypeError
yaradılır.
6.2 İstisnanın yenidən qablaşdırılması
Bəzən bir istisnanı tutmaq və daha spesifik və ya faydalı məlumat təqdim edən başqa birini atmaq lazımdır. Bunu raise
... from
operatorundan istifadə edərək etmək mümkündür. Bu, orijinal istisnanı səbəb kimi saxlamağa imkan verir yeni istisna üçün.
Bu əməliyyatın ümumi sintaksisi belədir:
raise yeni_istisna from köhnə_istisna
Nümunə: İstisnanın yenidən qablaşdırılması
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("Dəyişən boşdur")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Boş dəyişən aşkarlandı") from e
Bu nümunədə, əgər dəyişənin dəyəri boşdursa, əvvəlcə ValueError
istisnası "Dəyişən boşdur"
mesajı ilə atılır. Sonra bu istisna tutulur və yeni istisna EmptyVariableError
"Boş dəyişən aşkarlandı"
mesajı ilə atılır, orijinal istisna isə from
vasitəsilə ötürülür.
6.3 Yenidən quraşdırılmış istisnaların analiz edilməsi
raise
... from
operatorunun istifadəsi istisna zəncirlərinin məlumatlarını qorumağa imkan verir və bu, debugging üçün faydalı ola bilər. Siz yenidən quraşdırılmış istisnaları və onların səbəblərini analiz edə bilərsiniz.
Yenidən quraşdırılmış istisnaların analizi nümunəsi:
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("Dəyişən boşdur")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Boş dəyişən aşkar edildi") from e
Yuxarıdakı kodu çalışdırmaq belə bir nəticəyə gətirib çıxaracaq:
Traceback (most recent call last): File "example.py", line 8, in
check_non_empty("") File "example.py", line 5, in check_non_empty raise ValueError("Dəyişən boşdur") ValueError: Dəyişən boşdur
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "example.py", line 10, in
raise EmptyVariableError("Boş dəyişən aşkar edildi") from e EmptyVariableError: Boş dəyişən aşkar edildi
Birinci səhv (yaşıl rəng ilə qeyd olunmuş)
— kodun dərinliyində yaranmış orijinal səhvdir. Bəzən belə səhvlər arada bir meydana gəlir, bu proqramın normal davranışıdır.
İkinci səhv (mavi rəng ilə qeyd olunmuş)
— daha yüksək səviyyəli bir səhvdir. Proqramınız və ya framework bu səhvi necə idarə etməli olduğunu bilməlidir. Amma əgər daha dərinə dalmaq və səhvin səbəbini öyrənmək istəyirsinizsə, burada sizə yaşıl səhv kömək edəcək.
Hər şey çox məntiqli bir şəkildə qurulub.
GO TO FULL VERSION