3. tēma: 3.4 Kļūdu apstrāde un validācija

Tavs šīs stundas izaicinājums: Paredzēt lietotāja kļūdas, izstrādāt drošu ievades sistēmu un novērst programmas avārijas, izmantojot koda atkļūdošanas un validācijas metodes.

2.4.10. Veic programmas atkļūdošanu un testēšanu.
2.4.13. Lieto mainīgos, datu tipus un pamatkonstrukcijas.

Teorija: Izņēmumu apstrāde (Exceptions Handling)

Programmēšanā negaidītas kļūdas sauc par Exceptions (Izņēmumiem). Tā vietā, lai ļautu programmai "uzkārties", mēs šīs kļūdas pārtveram un apstrādājam.

# Īss kļūdu apstrādes paraugs
try:
    vecums = int(input("Cik Tev gadu? "))
    print(f"Tev ir {vecums} gadi.")
except ValueError:
    print("Kļūda! Lūdzu, ievadi tikai ciparus.")

1. uzdevums: Skaitļu drošības sargs

Ievies pamata kļūdu apstrādi, lai novērstu programmas aizvēršanos nepareizas ievades dēļ.

Izpildes soļi:

  1. VS Code izveido failu drosiba.py.
  2. Izveido try: bloku un iekšpusē pieprasi lietotāja vecumu, ietinot to int() funkcijā.
  3. Zem try bloka (bez atkāpes) pievieno except ValueError: bloku.
  4. Iekš except bloka izvadi ziņojumu: "Kļūda! Lūdzu, izmanto tikai ciparus.".
  5. Palaid programmu un ievadi vārdu "desmit" — programmai nevajadzētu izmest sarkano kļūdas paziņojumu terminālī, bet gan Tavu definēto tekstu.

2. uzdevums: Neatlaidīgā ievade

Apvieno While loop (Kamēr ciklu) ar kļūdu ķeršanu, lai pieprasītu ievadi, līdz tā ir derīga.

Izpildes soļi:

  1. Izveido failu validacija.py.
  2. Izveido while True: ciklu.
  3. Cikla iekšienē ievieto try/except ValueError bloku struktūru.
  4. Ja konvertācija izdodas (tas nozīmē, kļūdas nav), izmanto Break (Pārtraukšanas) komandu, lai nekavējoties izietu no cikla. break jāliek try bloka beigās.
  5. Ja notiek kļūda, except blokā izvadi brīdinājumu un ļauj ciklam dabiski atkārtoties.
  6. Programmas beigās izvadi veiksmīgi saglabāto skaitli.

3. uzdevums: Žetonu un likmju sargs

Izmanto kombinētu validāciju – gan datu tipa pārbaudi, gan loģiskos ierobežojumus (lielāks/mazāks).

Izpildes soļi:

  1. Izveido failu asp_validacija.py.
  2. Izmanto pilnu while True un try/except struktūru, lai iegūtu "Žetonu skaitu" (int) un "Likmi" (float).
  3. Pirms atļaut ciklam izmantot break komandu, pievieno loģisko pārbaudi (if): likme nedrīkst būt lielāka par pieejamajiem žetoniem un nedrīkst būt negatīvs skaitlis.
  4. Ja pārbaude neizdodas, izvadi: "Nepareizs likmes apjoms!" un izmanto continue, lai atkārtotu ievades pieprasījumu.
  5. Iesūtīt uzdevuma github saiti e-klasē.

Papildus uzdevums: Droša spēles izvēlne

Izveido navigācijas sistēmu, kas iztur gan nepareizus datu tipus, gan skaitļus ārpus atļautajām robežām.

Izpildes soļi:

  1. Izveido failu izvelne.py.
  2. Izveido While loop (Kamēr ciklu), kas piedāvā 3 opcijas terminālī (1 - Spēlēt, 2 - Noteikumi, 3 - Iziet).
  3. Izmanto try/except ValueError, lai neļautu programmai sabrukt, ja tiek ievadīts teksts.
  4. Pievieno zarošanos (if/elif/else), lai izpildītu atšķirīgas darbības atkarībā no izvēlētā skaitļa.
  5. Izmanto else, lai paziņotu, ja ievadīts skaitlis, kas nav 1, 2 vai 3. Pārtrauc ciklu tikai izvēles "3" gadījumā.

Biežākās kļūdas (un kā tās labot):

Koda piemērs: Profesionāla ievade

while True:
    try:
        likme = float(input("Ievadi likmi: "))
        
        # Validācijas loģika
        if likme <= 0:
            print("Likmei jābūt pozitīvai!")
            continue # Sākam no jauna
            
        # Ja viss ir pareizi, izejam no cikla
        break
        
    except ValueError:
        print("Kļūda! Ievadi skaitli, izmantojot punktu (piem., 5.5).")

print(f"Likme {likme} pieņemta!")
Ievadi likmi: pieci
Kļūda! Ievadi skaitli, izmantojot punktu (piem., 5.5).
Ievadi likmi: -10
Likmei jābūt pozitīvai!
Ievadi likmi: 10.5
Likme 10.5 pieņemta!
⬅ Iepriekšējā stunda Nākamā stunda ➡