CodeGym /Kurslar /Python SELF AZ /Loglama və səhvlərin emal edilməsi skriptin dayanıqlı işl...

Loglama və səhvlərin emal edilməsi skriptin dayanıqlı işləməsi üçün

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

1. Zaloglama

Bu gün əsəblərinizə və dəyərli vaxtınıza böyük fayda verə biləcək bir mövzuya dalacağıq — zaloglama və səhvlərin emalı. Hətta ən təcrübəli proqramçıların belə səhvlərdən sığortası yoxdur və sizin işiniz bu səhvləri proqnozlaşdırılan və idarə edilən etməkdir. Təsəvvür edin ki, siz arxeoloqsunuz və sizin işiniz ekspedisiyanızı gözlənilməz uçqunlardan və hiyləgər tələlərdən qorumaqdır — zaloglama və səhvlərin emalı bu təhlükəli işdə sizin etibarlı xəritəniz və qalxanınızdır!

Proqramlaşdırmada zaloglama haqqında danışırıqsa, proqramın işi ilə bağlı məlumatların yazılmasından söhbət gedir. Kodunuzun içində baş verən, amma bəzən bir baxışla görünməyən proseslərdir bu. Loglar yazaraq siz özünüzə ipucu qoyursunuz, sanki Hansel və Gretel meşədə evə qayıtmaq üçün çörək qırıntıları buraxırdılar.

Zaloglama quraşdırılması və tənzimlənməsi

Əsas alətlərlə başlayaq. Python-da zaloglama üçün daxili logging modulundan istifadə edəcəyik. Bu, proqramın icrası ilə bağlı məlumat yazmaq üçün sizin İsveçrə bıçağınızdır.

Python

import logging

# Zaloglamanın tənzimlənməsi
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# İstifadəyə nümunə
logging.info("Script işinin başlanması")
logging.error("Bu bir səhvdir")

        

Zaloglamanın hansı səviyyələri var?

  • DEBUG: ən detallı məlumat, adətən problemlərin diaqnostikasında maraqlı ola bilər.
  • INFO: proseslərin gözlənildiyi kimi işlədiyini təsdiqləyir.
  • WARNING: gözlənilməz bir şey və potensial problemə işarə edir, lakin proqram hələ də işləyir.
  • ERROR: funksiyanın icrasında uğursuzluğa səbəb olan ciddi səhvlər.

Zaloglama səviyyəsini tənzimləməklə informasiyanı filtr edə bilərsiniz. Məsələn, yalnız səhvlər və xəbərdarlıqlar sizi maraqlandırırsa, səviyyəni logging.WARNING olaraq təyin edin.

Selenium-da zaloglama nümunəsi

Gəlin zaloglamanın Selenium layihəsində necə tətbiq oluna biləcəyinə baxaq:

Python

from selenium import webdriver

# Zaloglamanın tənzimlənməsi
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    logging.info("Chrome sürücüsünün ilkinləşdirilməsi")
    driver = webdriver.Chrome()
    logging.info("Python.org səhifəsinin açılması")
    driver.get("https://www.python.org")
    logging.info("İşin uğurla başa çatması")
except Exception as e:
    logging.error(f"Xəta baş verdi: {e}")
finally:
    driver.quit()

        

Bu nümunə sizin Selenium scriptinizdə zaloglamanı necə inteqrasiya edə biləcəyinizi göstərir. Biz try, exceptfinally səhvlərin emalı üçün istifadə edirik — bu barədə daha ətraflı aşağıda.

2. Selenium-da xətaların idarə olunması

Proqramlaşdırmada, eləcə də həyatda, xətalar qaçınılmazdır. Amma biz onların necə idarə olunmasını nəzarətdə saxlaya bilərik. try, except, elsefinally-dən istifadə edərək xətaları eleqant şəkildə tutmaq və idarə etmək olar.

İstisnaları idarə etməyi xatırlayırıq

Gəlin, istisnaları necə idarə etdiyimizi xatırlayaq:

Python

try:
    # Xəta çıxara bilən kod
    result = 10 / 0
except ZeroDivisionError as e:
    # Əgər ZeroDivisionError istisnası yaranarsa icra olunacaq kod
    logging.error("Sıfıra bölmək mümkün deyil!")
else:
    # Əgər istisna yaranmazsa icra olunacaq kod
    logging.info("Əməliyyat uğurla başa çatdı")
finally:
    # Hər halda icra olunacaq kod
    logging.info("Əməliyyatlar tamamlandı")

        

try blokundakı kod icra olunacaq. Əgər ZeroDivisionError tipli xəta baş verərsə, except blokundakı kod icra olunacaq və proqram dayandırılmayacaq. else bloku, əgər istisna yaranmayıbsa, kodun icrasını nəzərdə tutur. Sonda isə, finally bloku hər zaman, xətanın olub-olmamasından asılı olmayaraq, icra olunur.

Selenium-da xətaların idarə olunması

Selenium müxtəlif situasiyaları idarə etmək üçün daxili istisnalar təklif edir. Gəlin onlardan bir neçəsi ilə tanış olaq və necə istifadə olunacağını öyrənək.

  1. NoSuchElementException — əgər element tapılmasa yaranır. Elementlərin mövcudluğunu yoxlamaq üçün istifadə edin.
    Python
    
    try:
        element = driver.find_element(By.ID, "element_id")
    except NoSuchElementException:
        logging.warning("ID 'element_id' olan element tapılmadı.")
    
                    
  2. TimeoutException — əgər gözlənilən element səhifədə müəyyən zaman ərzində meydana çıxmazsa yaranır. Gözləməni idarə etmək üçün istifadə olunur.
    Python
    
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "element_id"))
        )
    except TimeoutException:
        logging.error("ID 'element_id' olan elementi gözləmə xətası baş verdi.")
    
                    
  3. ElementClickInterceptedException — əgər element başqa bir element tərəfindən bloklanıbsa və klik etmək mümkün deyilsə yaranır. Popup-larla örtülə bilən elementlərə klik edərkən faydalıdır.
    Python
    
    from selenium.common.exceptions import ElementClickInterceptedException
    
    try:
        driver.find_element(By.ID, "button_id").click()
    except ElementClickInterceptedException:
        logging.warning("Element başqa element tərəfindən bloklanıb və klik edilə bilməz.")
    
                    

Təkrar cəhdlər və bərpa məntiqi

Scriptinizin dayanıqlılığını artırmaq üçün xətalar baş verən zaman təkrar cəhd mexanizmi tətbiq edə bilərsiniz. Məsələn, əgər sayt müvəqqəti olaraq əlçatmazdırsa və ya element tapılmayıbsa, script səhvlə tamamlanmadan öncə bir neçə dəfə həmin əməliyyatı yerinə yetirməyə cəhd edə bilər.

Python

import time

def retry_find_element(driver, by, value, retries=3):
    attempt = 0
    while attempt < retries:
        try:
            element = driver.find_element(by, value)
            logging.info(f"Element tapıldı: {value}")
            return element
        except NoSuchElementException:
            attempt += 1
            logging.warning(f"{attempt} cəhd uğursuz oldu, 2 saniyə sonra təkrar...")
            time.sleep(2)
    logging.error(f"{retries} cəhd sonra element tapılmadı.")
    return None

        

Scriptlərin dayanıqlılığı və etibarlılığı haqqında tövsiyələr

  • Aydın gözləmələrdən istifadə edin: Tədricən görünən elementlər üçün aydın gözləmələr təyin edin. Bu, yükləmə gecikmələrindən yaranan səhvlərin sayını azaldacaq.
  • Hər bir mərhələdə try-except blokları tətbiq edin: Bu, xətaları logging etməyə və kiçik nasazlıqlar zamanı scriptin dayanmasının qarşısını almağa imkan verir.
  • Vacib mərhələlər üçün təkrar cəhdlər tətbiq edin: Əgər xəta müvəqqəti ola bilərsə, bir neçə saniyəlik fasilə ilə təkrar cəhdlər qurun.
  • Hər bir addımı logging edin: Hər bir əsas mərhələni logging etmək, scriptin icra edilmə prosesini təhlil etməyə və gizli səhvləri tapmağa kömək edir.
  • Kritik xətalar üçün bildirişləri təyin edin: Məsələn, əgər loglarda CRITICAL səviyyəsində xəta qeydə alınarsa, email və ya chat mesajı göndərə bilərsiniz.

3. Logları faydalı şəkildə aparmaq

İndi ki, biz loglama və səhvlərin emalını öyrəndik, gəlin növbəti addımı ataq və loglardan maksimum faydanı necə çıxarmaq olar, baxaq.

Logların yeri və formatının seçilməsi

Logları analiz etmək üçün saxlamaq istəyirsinizsə, fayldan istifadə edin. Bu, sanki bir gündəlik aparmaq kimidir ki, onu təkrar oxuyub analiz edərək gələcək səhvlərdən qaça bilərsiniz. Loglamanı fayla yazmaq üçün quraşdıraq:

Python

logging.basicConfig(filename='app.log', filemode='w', level=logging.INFO)

# İndi bütün loglar app.log faylına yazılacaq
logging.info("Logların fayla yazılması başlandı.")

        

Logların analizi

Loglarınızı analiz edərək, tez-tez rast gəlinən səhvləri və ya performans problemlərini müəyyən edin. Bəlkə də sizin skriptiniz yalnız müəyyən günlərdə və ya saatlarda problemlərlə qarşılaşır və bunu yalnız logların detallı araşdırılması zamanı bilmək olar. Bu analiz — sizin şəxsi detektiv prosesinizdir ki, tətbiqinizin necə işlədiyini daha yaxşı başa düşməyə kömək edir.

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