Gestione Errori e CLI
Gestione Errori e Argomenti da CLI
Section titled “Gestione Errori e Argomenti da CLI”Basato su: Manuale Python per principianti (freeCodeCamp)
🎯 Obiettivi del Modulo
Section titled “🎯 Obiettivi del Modulo”- ✅ Gestire eccezioni con try/except/else/finally
- ✅ Usare l’istruzione with per il context management
- ✅ Fare debugging con pdb e logging
- ✅ Accettare argomenti dalla riga di comando
📅 Lezione 1 — Eccezioni in Python
Section titled “📅 Lezione 1 — Eccezioni in Python”Obiettivi specifici
Section titled “Obiettivi specifici”- Capire cosa sono le eccezioni
- Gestirle con try/except
- Usare else, finally, raise
Contenuti (dal manuale, sezione “Eccezioni in Python”)
Section titled “Contenuti (dal manuale, sezione “Eccezioni in Python”)”- Eccezioni: errori che fermano il programma
try:blocco che potrebbe generare erroreexcept NomeErrore:catturare eccezioni specificheelse:si esegue se nessuna eccezionefinally:si esegue SEMPREraise: lanciare eccezioni intenzionalmente- Eccezioni comuni: ValueError, TypeError, ZeroDivisionError, FileNotFoundError
- Creare eccezioni personalizzate
Attività (esercizi)
Section titled “Attività (esercizi)”try: numero = int(input("Inserisci un numero: ")) risultato = 10 / numeroexcept ValueError: print("Errore: devi inserire un numero!")except ZeroDivisionError: print("Errore: divisione per zero!")else: print(f"Risultato: {risultato}")finally: print("Operazione completata")
# raisedef dividi(a, b): if b == 0: raise ValueError("Non puoi dividere per zero!") return a / bRiferimenti
Section titled “Riferimenti”- Manuale → sezione Eccezioni in Python
📅 Lezione 2 — L’istruzione with
Section titled “📅 Lezione 2 — L’istruzione with”Contenuti (dal manuale, sezione “L’istruzione with in Python”)
Section titled “Contenuti (dal manuale, sezione “L’istruzione with in Python”)”- Context manager: gestire risorse (file, connessioni)
with open("file.txt", "r") as f:— chiusura automatica- Equivalente a try/finally ma più pulito
contextlibper creare context manager custom
Attività (esercizi)
Section titled “Attività (esercizi)”# with per leggere file (chiusura automatica)with open("prova.txt", "w") as f: f.write("Ciao mondo!")
with open("prova.txt", "r") as f: contenuto = f.read() print(contenuto)
# Senza with (bisogna chiudere manualmente)f = open("prova.txt", "r")contenuto = f.read()f.close() # facile dimenticarlo!Riferimenti
Section titled “Riferimenti”- Manuale → sezione L’istruzione with in Python
📅 Lezione 3 — Debugging in Python
Section titled “📅 Lezione 3 — Debugging in Python”Contenuti (dal manuale, sezione “Debugging in Python”)
Section titled “Contenuti (dal manuale, sezione “Debugging in Python”)”- print debugging: stampare variabili
- pdb: debugger interattivo
- traceback: leggere l’stack trace degli errori
- logging: registrare eventi con livelli (debug, info, warning, error)
Attività (esercizi)
Section titled “Attività (esercizi)”# print debuggingdef somma_lista(numeri): print(f"DEBUG: ricevuti {numeri}") totale = sum(numeri) print(f"DEBUG: totale = {totale}") return totale
# pdb (sblocca debugging interattivo)import pdb
def funzione_con_bug(x, y): risultato = x / y pdb.set_trace() # si ferma qui per debugging return risultato * 2
# loggingimport logginglogging.basicConfig(level=logging.INFO)logging.info("Programma avviato")logging.warning("Attenzione: file non trovato, uso default")Riferimenti
Section titled “Riferimenti”- Manuale → sezione Debugging in Python
📅 Lezione 4 — Argomenti da riga di comando
Section titled “📅 Lezione 4 — Argomenti da riga di comando”Contenuti (dal manuale, sezione “Come accettare argomenti dalla riga di comando in Python”)
Section titled “Contenuti (dal manuale, sezione “Come accettare argomenti dalla riga di comando in Python”)”- sys.argv: lista di argomenti dal terminale
sys.argv[0]è il nome dello script- argparse: parsing avanzato per applicazioni CLI professionali
Attività (esercizi)
Section titled “Attività (esercizi)”# sys.argv baseimport sysprint(f"Nome script: {sys.argv[0]}")if len(sys.argv) > 1: print(f"Argomenti: {sys.argv[1:]}")
# argparseimport argparseparser = argparse.ArgumentParser(description="Calcolatrice CLI")parser.add_argument("--numero", type=int, help="Un numero", required=True)parser.add_argument("--verbose", action="store_true", help="Output dettagliato")args = parser.parse_args()
if args.verbose: print(f"Numero inserito: {args.numero}")print(f"Quadrato: {args.numero ** 2}")Riferimenti
Section titled “Riferimenti”- Manuale → sezione Come accettare argomenti dalla riga di comando in Python
🏠 Esercizi per Casa
Section titled “🏠 Esercizi per Casa”"""ESERCIZIO 1: Calcolatrice robustaCrea una calcolatrice che chiede due numeri e un'operazione.Gestisci TUTTE le eccezioni possibili (ValueError, ZeroDivisionError).Usa un loop per continuare fino a quando l'utente dice "esci"."""
"""ESERCIZIO 2: Task Manager CLICrea un programma da riga di comando che:- Accetta --add "titolo" per aggiungere un task- Accetta --list per listare tutti i task- Salva i task in un file JSON"""📊 Verifica Apprendimento
Section titled “📊 Verifica Apprendimento”| Domanda | Risposta |
|---|---|
| Blocchi di try/except? | try, except, else (opz.), finally (opz.) |
| Differenza tra else e finally? | else: solo se nessun errore. finally: sempre |
Cosa fa raise ValueError("msg")? | Lancia intenzionalmente un’eccezione |
Vantaggio di with rispetto a try/finally? | Codice più pulito, chiusura automatica risorse |
| Cos’è sys.argv? | Lista di argomenti passati da riga di comando |
| Modulo per CLI professionali? | argparse |