Siirry sisältöön

Python 3/assert ja debug-lohko

Wikikirjastosta


Lauseella assert voi testata, että ohjelman sisäinen logiikka on sellaista kuin sen oletetaan olevan. Assert-lausetta ei pidä käyttää muiden virheiden, kuten väärien käyttäjän antamien syötteiden käsittelyssä. Assert-lauseelle annetaan ehto, jonka oletetaan olevan tosi. Jos ehto ei ole tosi, keskeytyy ohjelman suoritus AssertError-virheeseen. Lauseelle voi antaa myös valinnaisen tekstin, joka tulostetaan virheen kanssa.

Assert-lause on muotoa
assert ehto, [virheilmoitus]

Esimerkiksi voimme varmistaa, että funktiolle annettavat parametrit ovat sellaisia, kuin oletamme.

def tee_jakolasku(jaettava, jakaja):
    assert jakaja != 0, "Jakaja on nolla"
    return jaettava / jakaja
def aikaväli(alku, loppu):
    assert loppu >= alku, "Loppu on ennen alkua"
    return loppu - alku

Debug-muuttujaa voi käyttää ehtolauseissa, kun halutaan suorittaa koodia, joka suoritetaan vain kehitysvaiheessa, ei valmiissa ohjelmassa. __Debug__ -muuttujan arvo on tosi, kun ohjelma suoritetaan kehitysmoodissa ja epätosi, kun se suoritetaan tuotantomoodissa. Toisin sanoen, kun sitä käyttää if-lauseen ehtona, suoritetaan if-lohkon sisällä oleva koodi vain, kun ohjelma ajetaan kehitysmoodissa.

Ohjelma ajetaan kehitysmoodissa, kun se käynnistetään ilman tulkille annettavia opitimointiparametria -O (tai -OO) (ks. Python-tulkki » -O ja -OO). Kun tulkille annetaan jompi kumpi optimointiparametri, poistetaan ohjelmasta kaikki ehdot, joissa käytetään __debug__ -muuttujaa, sekä assert-lauseet.

if __debug__:
    print(f"Muuttuja on nyt {muuttuja}")