Python-da istisnaları müxtəlif üsullarla düzgün şəkildə necə işləmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
İstisnalar try, except, else, finally blokları ilə idarə olunur.
Əsas idarəetmə növləri:
-
Əsas tutma: Hər hansı bir istisnanı tutar.
try: # İstisna yarada biləcək kod result = 10 / 0 except: # Hər hansı istisnanın idarə olunması print("Xəta baş verdi.") -
Müəyyən bir istisnanı tutma: Konkret bir istisna növünü tutar.
try: # İstisna yarada biləcək kod result = 10 / 0 except ZeroDivisionError: # Sıfıra bölmənin idarə olunması print("Xəta: sıfıra bölmə.") -
Bir neçə istisnanı tutma: Bir neçə istisna növünü tutar.
try: # İstisna yarada biləcək kod data = [1, 2, 3] print(data[5]) result = 10 / 0 except (IndexError, ZeroDivisionError): # İndeks və ya sıfıra bölmə xətalarının idarə olunması print("İndeks və ya sıfıra bölmə xətası baş verdi.") -
İstisnaya çıxış və istisna obyektinə giriş: Xəta haqqında məlumat əldə etməyə imkan verir.
try: # İstisna yarada biləcək kod result = int("abc") except ValueError as e: # Dəyişmə xətasının idarə olunması, e xətə haqqında məlumat saxlayır print(f"Dəyər xətası: {e}") -
elseistifadə: Əgər istisna baş verməzsə, icra olunur.try: # Xəta olmayan kod result = 10 / 2 except ZeroDivisionError: print("Xəta: sıfıra bölmə.") else: # Xəta yoxdursa icra olunur print(f"Nəticə: {result}") -
finallyistifadə: Hər zaman icra olunur, istisna olub-olmamasından asılı olmayaraq. Resursların azad olunması üçün istifadə olunur.file = None try: file = open("myfile.txt", "r") # Fayldan oxuma və ya digər əməliyyatlar except FileNotFoundError: print("Fayl tapılmadı.") finally: # Fayl açıqdırsa, bağlanır if file: file.close() print("Fayl bağlandı.") -
raiseistisnaları qaldırmaq üçün: İstisnaları yaratmaq üçün istifadə olunur.def divide(a, b): if b == 0: # İstisna qaldırılır raise ZeroDivisionError("Sıfıra bölmək olmaz!") return a / b try: print(divide(10, 0)) except ZeroDivisionError as e: print(f"Əldə olunan istisna: {e}") -
raise ... from ...istisnaları birləşdirmək üçün: Yeni istisnanı əvvəlki ilə əlaqələndirməyə imkan verir.try: result = 1 / 0 except ZeroDivisionError as e: # Yeni istisna qaldırılır və əvvəlki ilə əlaqələndirilir raise RuntimeError("Daxili xəta baş verdi") from e -
with open(...)kontekst menecerindən istifadə: Resursun düzgün bağlanmasını təmin edir (məsələn, fayl).try: with open("myfile.txt", "r") as file: content = file.read() print(content) # fayl avtomatik olaraq bağlanır except FileNotFoundError: print("Fayl tapılmadı.")
İstisna idarəetmə bloklarının xülasəsi:
| Blok | Təsviri | Nə zaman icra olunur |
|---|---|---|
try |
İstisnaların baş verə biləcəyi kod bloku | Həmişə |
except |
try daxilində baş verən istisnaların idarə olunması |
Əgər istisna baş verərsə |
else |
try daxilində istisna baş verməzsə, icra olunur |
Əgər istisna yoxdursa |
finally |
Hər zaman icra olunur, istisna olub-olmamasından asılı olmayaraq | Həmişə |
Yöntəm seçimi vəziyyətə və istənilən detallıq səviyyəsinə görə dəyişir. Yalnız düzgün idarə edə biləcəyiniz istisnaları tutmaq və çox geniş tutmalardan (except:) çəkinmək vacibdir.