Vai al contenuto principale

Come usare l’istruzione assert in Python

Implementare l’istruzione assert in Python è semplice: usiamo assert per verificare condizioni e mostrare un messaggio se la condizione è falsa.
· 6 min leggi

Scopri con l'IA

L’istruzione assert in Python è uno strumento per stabilire verità fondamentali nel tuo codice. Funziona permettendo agli sviluppatori di convalidare le assunzioni all’interno del codice. In questo tutorial impareremo a padroneggiare l’istruzione assert di Python, inclusi sintassi, utilizzo e applicazioni nel debugging e nel rilevamento degli errori. Padroneggiando l’istruzione assert di Python, sarai un passo più vicino a diventare un Programmatore Python esperto. 

La risposta breve: come scrivere le asserzioni in Python 

La sintassi dell’istruzione assert è semplice:

assert condition, message

Qui, condition si riferisce all’espressione da testare, mentre message è un messaggio di errore opzionale che appare se l’asserzione fallisce.

Ecco alcune asserzioni che puoi provare nel tuo codice Python per prenderci la mano. Nel primo caso, l’espressione 3<4>5 è logicamente errata, quindi Python genera un’eccezione AssertionError con il messaggio che abbiamo fornito: "Math does not work that way." Nel secondo caso, l’espressione 0==0 è una tautologia quindi non vedremo mai il messaggio, "This shouldn't throw an error." 

assert 3<4>5, "Math does not work that way."
assert 0==0, "This shouldn't throw an error."

Panoramica dell’istruzione assert di Python

Diamo ora uno sguardo più da vicino all’istruzione assert di Python, incluso come e perché si usa. Alla fine di questo tutorial, saprai usare alla perfezione l’istruzione assert in Python. 

Cosa sono le asserzioni in Python?

Le asserzioni in programmazione, in generale, sono costrutti utilizzati per verificare la veridicità di condizioni nel codice. In altre parole, sono verità a cui il programma deve conformarsi, altrimenti verrà generato un errore. Usando la parola "assert", Python implementa queste asserzioni con una sintassi molto letterale: l’istruzione assert ci permette di creare queste asserzioni.

Quando usare le asserzioni in Python

Le asserzioni sono preziose per effettuare il debugging, convalidare le assunzioni e assicurarsi che il tuo codice si comporti come previsto in determinate condizioni. Ti consentono di dire al computer cosa ti aspetti che faccia e di chiedergli di fermarsi quando si comporta diversamente. Questo è utile quando costruisci un nuovo programma o aggiungi una funzionalità o aggiorni un’app esistente.

Le asserzioni brillano in scenari in cui gli sviluppatori devono far rispettare precondizioni, postcondizioni o invarianti all’interno del codebase. Agiscono come barriere protettive, impedendo al codice di procedere se certe condizioni vengono violate, aiutando così a rilevare precocemente potenziali bug.

Posizionando in modo strategico le asserzioni nel codice, puoi intercettare gli errori più vicino alla loro origine, semplificando il debugging. Il percorso di carriera Python Developer di DataCamp è un ottimo corso per aspiranti sviluppatori di ogni livello per esercitare le competenze di programmazione funzionale, perché include esercizi con concetti sia di base sia avanzati.

Quando non usare le asserzioni in Python

Sebbene le asserzioni siano preziose durante lo sviluppo, ci sono scenari in cui il loro utilizzo potrebbe essere inappropriato.

È importante capire che quando il tuo codice viene compilato per la produzione, le asserzioni possono essere disabilitate globalmente. Questo significa che non dovresti fare affidamento sulle asserzioni per gestire problemi di run-time, come un utente che inserisce dati errati. Dovrebbero invece essere usate per problemi di sviluppo, come l’identificazione di inesattezze logiche o matematiche.

Per gestire gli errori o convalidare i dati nel codice di produzione, prova a incorporare costrutti di gestione delle eccezioni per consentire al codice di recuperare con grazia dagli errori, registrare informazioni rilevanti ai fini del debugging e fornire feedback significativi agli utenti.

Puoi approfondire come trovare e correggere gli errori nel nostro tutorial Exception and Error Handling in Python o seguendo il corso Associate Data Scientist in Python. 

Errori comuni e fraintendimenti con l’istruzione assert in Python

Un errore comune quando si usa l’istruzione assert in Python è usare le parentesi. È un errore comprensibile, dato che molte funzioni usano le parentesi e includerle può venire naturale. Tuttavia, l’istruzione assert non è tecnicamente una funzione in Python, quindi utilizza una sintassi speciale. Se usi le parentesi, è probabile che tu incorra in avvisi di sintassi e errori logici.

Esempio di errore dovuto all’uso di parentesi in un’istruzione assert.SyntaxWarning: assertion is always true, perhaps remove parentheses?

Un altro errore comune è dimenticare la virgola dopo la condizione. Farlo provocherà un errore di sintassi.

Esempio di errore dovuto alla mancanza di una virgola in un’istruzione assert.SyntaxError: invalid syntax

L’eccezione AssertionError

Un’eccezione AssertionError viene generata ogni volta che i termini di un’asserzione vengono violati. Questo errore interrompe l’esecuzione del programma; verrà mostrato qualsiasi messaggio di errore opzionale che hai impostato. Dato che le asserzioni sono usate principalmente per testare il tuo codice durante lo sviluppo, se ricevi un messaggio di eccezione AssertionError in Python, in genere è bene prenderlo sul serio. Potrebbe indicare un difetto fatale nel tuo codice.

Applicazioni pratiche

Un’istruzione assert può essere usata in molte applicazioni pratiche in Python. Il nostro corso interattivo Writing Functions in Python offre molti esercizi che ti aiuteranno a raggiungere la padronanza. Ecco un paio di esempi. 

Usare assert all’interno di una funzione

Un modo utile di usare le asserzioni è inserirle nelle funzioni. Questo può aiutare a garantire che le tue funzioni si comportino come previsto.

def divide(a, b):
assert b != 0, "Division by zero!"
return a / b

# Test cases
print(divide(10, 2))  # Output: 5.0
print(divide(8, 0))   # AssertionError: Division by zero!

Usare assert con unittest

Testare il tuo codice è uno step essenziale nel processo di sviluppo. Unittest è una libreria pensata per aiutarti a testare il tuo codice in modo efficiente, e utilizza le istruzioni assert per farlo. Questo è il modo in cui più spesso uso le istruzioni assert. Ecco un esempio che potresti trovare nel nostro corso Introduction to Testing in Python. 

import unittest

class TestMathFunctions(unittest.TestCase):
    def test_addition(self):
        self.assertEqual(2 + 2, 4)

    def test_subtraction(self):
        self.assertEqual(5 - 3, 2)

    def test_division(self):
        self.assertRaises(ZeroDivisionError, divide, 10, 0)

if __name__ == '__main__':
    unittest.main()

Conclusione

L’istruzione assert di Python è uno strumento fondamentale per il debugging e la verifica delle condizioni nel tuo codice durante lo sviluppo. Pur essendo semplice ed efficace per testare le assunzioni, non dovrebbe essere utilizzata in produzione poiché può essere disattivata nel codice compilato. Al suo posto, per una gestione robusta degli errori, andrebbe usata la gestione delle eccezioni. 

Dai un’occhiata al nostro tutorial Coding Best Practices and Guidelines come risorsa per eventuali dubbi residui.

Amberle McKee

Autore

Amberle McKee

Sono un PhD con 13 anni di esperienza nel lavoro con i dati in un contesto di ricerca biologica. Creo software in diversi linguaggi di programmazione, tra cui Python, MATLAB e R. Sono appassionato di condividere con il mondo il mio amore per l’apprendimento.

Argomenti

Correlato