lettura facile

L'istruzione alert in Python

Oggi parleremo di uno strumento molto utile e spesso sottovalutato in Python: il comando `assert`.

In Python, `assert` è una dichiarazione utilizzata per verificare se una condizione è vera. La sintassi di `assert` è semplice:

assert condizione, messaggio_di_errore

L'istruzione ha due argomenti:

  • La  `condizione` è l'espressione che si vuole verificare.
  • Il `messaggio_di_errore` è opzionale, ma altamente consigliato. È il messaggio che verrà mostrato se l'assert fallisce.

Se la condizione è falsa, l'esecuzione del programma viene interrotta e viene sollevata un'eccezione `AssertionError`.

In altre parole, `assert` è un modo per inserire dei punti di controllo nel codice per assicurarsi che certe condizioni siano soddisfatte durante l'esecuzione.

Perché usare assert? L'uso di `assert` è particolarmente utile durante lo sviluppo e il debug del codice. Serve per verificare che le assunzioni fatte dal programmatore siano corrette. Ricorda che `assert` non va mai usato in ambiente di produzione perché in alcuni ambienti Python potrebbe essere disattivato.

Vediamo ora alcuni esempi pratici per capire come utilizzare `assert` nel codice.

Supponiamo di avere una funzione che calcola la radice quadrata di un numero. Vogliamo assicurarci che l'input sia un numero positivo.

import math

def radice_quadrata(x):
   assert x >= 0, "L'input deve essere un numero non negativo"
   return math.sqrt(x)

Se provi a chiamare la funzione con un numero positivo, restituisce la radice quadrata del numero

print(radice_quadrata(9))

3.0

Se invece la chiami indicando un numero negativo, viene sollevata un'eccezione del tipo AssertionError

print(radice_quadrata(-4))

AssertionError: L'input deve essere un numero non negativo

Facciamo un altro esempio.

Vogliamo assicurarci che un attributo rimanga sempre all'interno di un certo intervallo.

class Temperature:
    def __init__(self, gradi):
        self.set_gradi(gradi)
    
    def set_gradi(self, gradi):
        assert -273.15 <= gradi <= 1000, "Temperatura non valida: deve essere tra -273.15 e 1000 gradi Celsius"
        self._gradi = gradi
    
    def get_gradi(self):
        return self._gradi

Adesso crea un'istanza della classe indicando 25 come parametro.

t = Temperature(25)

Quando accedi all'oggetto viene visualizzato il valore che gli hai assegnato

print(t.get_gradi()) 

25

Ora prova a modificare il valore dei gradi inserendo -300

t.set_gradi(-300) 

In questo caso viene sollevata un'eccezione AssertionError perché il valore è fuori dell'intervallo. E' al di sotto dello zero assoluto (-273.15).

AssertionError: Temperatura non valida: deve essere tra -273.15 e 1000 gradi Celsius

Lo stesso accadrebbe se indicassi un valore superiore a 1000.

Quando non usare assert

Il comando assert va usato solo solo per verifiche interne durante lo sviluppo e il debugging.

Non va mai usato in ambiente di produzione perché `assert` può essere disabilitato eseguendo Python con l'opzione `-O` (ottimizzazione) e i controlli non verrebbero eseguiti durante l'esecuzione.

L'opzione -O disabilita la modalità debug ( __debug__ ) di Python che normalmente è True.

Pertanto, non è affidabile per gestire condizioni critiche che devono essere sempre verificate.

Ad esempio, gli input degli utenti devono essere sempre verificati con condizioni esplicite e gestione delle eccezioni. Mai con l'istruzione 'assert'.

Inoltre l'eccezione AssertionError è molto generica e non indica esattamente la natura del problema.

Spero che questa guida ti sia stata utile.

 




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin