Esercizi Eccezioni Custom Python

Edoardo Midali
Edoardo Midali

Esercizi per praticare la creazione e gestione delle eccezioni personalizzate in Python, ideali per affinare la gestione avanzata degli errori.

Esercizio 1

Definire una eccezione personalizzata `ErroreNumeroNegativo` e usarla per controllare l'input dell'utente.
class ErroreNumeroNegativo(Exception):
    pass

try:
    numero = int(input("Inserisci un numero positivo: "))
    if numero < 0:
        raise ErroreNumeroNegativo("Il numero non può essere negativo.")
    print("Hai inserito:", numero)
except ErroreNumeroNegativo as e:
    print(e)

Esercizio 2

Creare un'eccezione personalizzata `DivisioneNonValida` per gestire il tentativo di dividere per zero.
class DivisioneNonValida(Exception):
    pass

try:
    numeratore = 10
    denominatore = int(input("Inserisci il denominatore: "))
    if denominatore == 0:
        raise DivisioneNonValida("Divisione per zero non permessa.")
    else:
        risultato = numeratore / denominatore
        print("Risultato:", risultato)
except DivisioneNonValida as e:
    print(e)

Esercizio 3

Implementare un'eccezione personalizzata `AnnoNonValido` per verificare che un anno sia nell'intervallo [1900, 2100].
class AnnoNonValido(Exception):
    pass

try:
    anno = int(input("Inserisci un anno tra 1900 e 2100: "))
    if not 1900 <= anno <= 2100:
        raise AnnoNonValido("L'anno inserito non è valido.")
    print("Anno valido:", anno)
except AnnoNonValido as e:
    print(e)

Esercizio 4

Creare un'eccezione personalizzata `UsernameTroppoCorto` e usarla per validare la lunghezza di un username inserito dall'utente.
class UsernameTroppoCorto(Exception):
    pass

try:
    username = input("Crea il tuo username (almeno 5 caratteri): ")
    if len(username) < 5:
        raise UsernameTroppoCorto("Username troppo corto.")
    print("Username valido!")
except UsernameTroppoCorto as e:
    print(e)

Esercizio 5

Definire una eccezione personalizzata `ValoreNonAmmesso` per prevenire l'inserimento di un valore specifico.
class ValoreNonAmmesso(Exception):
    pass

valore_proibito = 999

try:
    numero = int(input(f"Inserisci un numero diverso da {valore_proibito}: "))
    if numero == valore_proibito:
        raise ValoreNonAmmesso(f"Il valore {valore_proibito} non è ammesso.")
    print("Numero valido!")
except ValoreNonAmmesso as e:
    print(e)

Esercizio 6

Implementare un'eccezione personalizzata `PasswordNonSicura` per controllare che una password contenga almeno un numero e una lettera maiuscola.
import re

class PasswordNonSicura(Exception):
    pass

try:
    password = input("Inserisci una password (deve contenere un numero e una lettera maiuscola): ")
    if not re.search("[0-9]", password) or not re.search("[A-Z]", password):
        raise PasswordNonSicura("Password non sicura.")
    print("Password valida!")
except PasswordNonSicura as e:
    print(e)

Esercizio 7

Creare un'eccezione personalizzata `EmailNonValida` e usarla per verificare che un'email contenga '@' e '.'.
class EmailNonValida(Exception):
    pass

try:
    email = input("Inserisci la tua email: ")
    if '@' not in email or '.' not in email:
        raise EmailNonValida("Email non valida.")
    print("Email inserita correttamente!")
except EmailNonValida as e:
    print(e)

Esercizio 8

Implementare un'eccezione personalizzata `LimiteSuperato` per gestire il superamento di un limite numerico predefinito.
class LimiteSuperato(Exception):
    pass

limite = 100

try:
    numero = int(input(f"Inserisci un numero inferiore a {limite}: "))
    if numero > limite:
        raise LimiteSuperato("Hai superato il limite consentito.")
    print("Numero accettato!")
except LimiteSuperato as e:
    print(e)

Esercizio 9

Definire una eccezione personalizzata `CarattereNonValido` per impedire l'inserimento di caratteri speciali in un nome.
class CarattereNonValido(Exception):
    pass

try:
    nome = input("Inserisci il tuo nome (solo lettere): ")
    if not nome.isalpha():
        raise CarattereNonValido("Il nome contiene caratteri non validi.")
    print("Nome accettato!")
except CarattereNonValido as e:
    print(e)

Esercizio 10

Creare un'eccezione personalizzata `CapacitàSuperata` per controllare l'aggiunta di elementi in una lista che ha una capacità massima.
class CapacitàSuperata(Exception):
    pass

capacità_massima = 5
lista = []

try:
    while True:
        elemento = input("Inserisci un elemento (stop per terminare): ")
        if elemento.lower() == 'stop':
            break
        if len(lista) >= capacità_massima:
            raise CapacitàSuperata("La lista ha raggiunto la sua capacità massima.")
        lista.append(elemento)
except CapacitàSuperata as e:
    print(e)
finally:
    print("Elementi nella lista:", lista)

Esercizio 11

Implementare un'eccezione personalizzata `SogliaMinimaNonRaggiunta` per un valore numerico minimo richiesto.
class SogliaMinimaNonRaggiunta(Exception):
    pass

soglia_minima = 10

try:
    numero = int(input(f"Inserisci un numero maggiore di {soglia_minima}: "))
    if numero <= soglia_minima:
        raise SogliaMinimaNonRaggiunta(f"Il numero deve essere maggiore di {soglia_minima}.")
    print("Numero valido!")
except SogliaMinimaNonRaggiunta as e:
    print(e)

Esercizio 12

Creare un'eccezione personalizzata `ElementoDuplicato` per evitare l'inserimento di elementi duplicati in una lista.
class ElementoDuplicato(Exception):
    pass

elementi = set()

try:
    while True:
        elemento = input("Inserisci un elemento unico (stop per terminare): ")
        if elemento.lower() == 'stop':
            break
        if elemento in elementi:
            raise ElementoDuplicato(f"L'elemento '{elemento}' è già presente.")
        elementi.add(elemento)
except ElementoDuplicato as e:
    print(e)
finally:
    print("Elementi unici inseriti:", elementi)

Esercizio 13

Definire una eccezione personalizzata `TempoScaduto` per gestire l'input dell'utente entro un certo limite di tempo.
import time, threading

class TempoScaduto(Exception):
    pass

def set_timeout(timeout):
    time.sleep(timeout)
    raise TempoScaduto("Tempo scaduto per l'input.")

try:
    timer = threading.Thread(target=set_timeout, args=(5,))
    timer.start()
    risposta = input("Hai 5 secondi per rispondere: ")
    timer.cancel()
    print("Risposta accettata:", risposta)
except TempoScaduto as e:
    print(e)

Esercizio 14

Implementare un'eccezione personalizzata `OperazioneIllecita` per gestire azioni non consentite in un'applicazione.
class OperazioneIllecita(Exception):
    pass

azione = input("Cosa vuoi fare? (leggi/scrivi): ")

try:
    if azione != 'leggi' and azione != 'scrivi':
        raise OperazioneIllecita("Azione non consentita.")
    print(f"Azione '{azione}' eseguita con successo.")
except OperazioneIllecita as e:
    print(e)

Esercizio 15

Creare un'eccezione personalizzata `LimiteDiEtàSuperato` per impedire l'accesso a minori in una sezione di un sito web.
class LimiteDiEtàSuperato(Exception):
    pass

età_minima = 18

try:
    età = int(input("Quanti anni hai? "))
    if età < età_minima:
        raise LimiteDiEtàSuperato("Accesso non consentito ai minori.")
    print("Accesso consentito.")
except LimiteDiEtàSuperato as e:
    print(e)