CodeGym /Kurslar /Python SELF AZ /İstisna atmaq

İstisna atmaq

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION