CodeGym /Kurslar /Python SELF AZ /Proqram işləyərkən baş verən xətalar

Proqram işləyərkən baş verən xətalar

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

1.1 Səhvin yaranması

Səhvlər (və istisnalar) proqramlaşdırmanın ayrılmaz bir hissəsidir. Onlar proqram gözlənilməz vəziyyətlərlə qarşılaşanda yaranır və proqram onları idarə edə bilmir. Python-da istisnaları idarəetmə sistemi mövcuddur ki, bu da səhvləri tutmağa və idarə etməyə, proqramın dayandırılmasının qarşısını almağa imkan verir.

İstisnalar əsasən aşağıdakı hallarda yaranır:

Sintaksis səhvləri:

Bu səhvlər kodun kompilyasiya mərhələsində aşkar olunur və Python dilinin qrammatikasının düzgün olmaması ilə bağlıdır. Məsələn, iki nöqtənin buraxılması və ya səhv açar sözlərin işlədilməsi.


if True:
    print("Salam")
        

İcra vaxtı səhvləri (Runtime Errors):

Bu səhvlər proqram işləyərkən yaranır və sıfıra bölünmə, olmayan siyahı indeksinə müraciət, məlumat tiplərindən səhv istifadə və s. kimi müxtəlif səbəblərdən baş verə bilər.


print(1 / 0)  # ZeroDivisionError
        

Məntiqi səhvlər:

Bu səhvlər proqram heç bir xəta vermədən işləyəndə, lakin yanlış nəticələr çıxardıqda baş verir. Məntiqi səhvlər istisnalar yaratmır və onları tapıb düzəltmək çətindir.

Məntiqi səhvlərə adətən buglar deyilir — sanki proqramın funksionallığında müəyyən bir çatışmazlıqdır. İcra vaxtı səhvləri isə istisnalar adlanır. Python hər belə səhv üçün xüsusi bir obyekt (istisna) yaradır və onu proqrama «atır»...

1.2 İstisnaların yolu

Python-da bir istisna yarananda, o çağırış stack-ı üzrə yuxarı qalxır, həmin istisna işlənilənə qədər. Çağırış stack-ı, istisnanın yaranmasına səbəb olmuş funksiyaların ardıcıllığını təmsil edir.

İstisnaların qaldırılması mexanizmi

  • İstisnanın yaranması: Səhv baş verdikdə, Python bir istisna obyekt yaradır.
  • İstisna işləyicisini axtarmaq: Python interpretatoru cari kod blokunda istisna işləyicisini axtarmağa başlayır. Əgər işləyici tapılmasa, o, cari funksiyanı çağıran növbəti kod blokuna keçir.
  • İstisnanın stack üzrə qaldırılması: Bu proses işləyici tapılana qədər və ya çağırış stack-ı bitənə qədər təkrarlanır.
  • Proqramın bitirilməsi: Əgər işləyici tapılmasa, proqram işi dayandırır və səhv mesajı göstərir.

Nümunə:


def func_a():
    func_b()
        
def func_b():
    func_c()
        
def func_c():
    print(1 / 0)  # Burada ZeroDivisionError istisnası yaranır
        
func_a()
        

Bu nümunədə ZeroDivisionError istisnası func_c funksiyasında yaranır, sonra isə çağırış stack-ı üzrə func_bfunc_a vasitəsilə yuxarı qalxır. Əgər heç bir yerdə işləyici tapılmasa, proqram səhvlə dayanır.

1.3 Log oxuma

Proqram işləməyi bitirdikdə emal olunmamış istisna (exception) səbəbindən, Python stack trace (traceback) çap edir ki, bu da inkişafçılara nə səhv getdiyini başa düşməkdə kömək edir. Stack trace funksiya çağırışlarının ardıcıllığı ilə bağlı məlumatları ehtiva edir ki, bu da istisnanın baş verməsinə səbəb olub və proqramın debugging (düzəliş) üçün analiz edilə bilər.

Stack trace nümunəsi


Traceback (most recent call last):
    File "example.py", line 10, in 
  
    func_a() File "example.py", line 2, in func_a func_b() File "example.py", line 5, in func_b func_c() File "example.py", line 8, in func_c print(1 / 0) ZeroDivisionError: division by zero
  

Stack trace analiz edilməsi

  • İstisna tipi və mesaj: Stack trace sonunda istisna tipi və mesaj göstərilir. Nümunədə bu ZeroDivisionError: division by zerodir.
  • Çağırışların ardıcıllığı: Stack trace funksiya çağırışlarının ardıcıllığını göstərir. Bizim nümunədə səhv print(1 / 0) sətrində baş verib func_c funksiyasında, hansı ki func_b tərəfindən çağırılmışdır, hansı ki öz növbəsində func_a tərəfindən çağırılmışdır.
  • Fayllar və kod sətrləri: Trace-də hər sətrdə çağırışın baş verdiyi fayl və sətrin nömrəsi göstərilir. Bu, kodda səhvi tapıb düzəltməyi asanlaşdırır.

Stack trace praktik istifadəsi

Stack trace debugging və proqramların analiz edilməsi üçün vacib bir vasitədir. O, inkişafçılara səhvin səbəbini və onun kodun hansı hissəsində baş verdiyini anlamaqda kömək edir. Stack trace-dən istifadə ilə bağlı bir neçə məsləhət:

  1. Aşağıdan yuxarıya oxuma: Trace-dən analizə ən aşağıdakı çağırışdan başlayın, çünki istisna məhz həmin yerdə baş verib.
  2. Bütün çağırışları yoxlama: Trace-dəki bütün çağırışları öyrənin ki, istisnanın hansı yolla ötürüldüyünü başa düşəsiniz.
  3. Kodu düzəltmək: Trace-dən alınan məlumatı istifadə edərək kodu düzəldin və gələcəkdə oxşar səhvlərdən qaçının.

İstisnalar haqqında daha ətraflı məlumatı növbəti mühazirələrdə öyrənəcəksiniz.

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