
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.