0Pricing
Python Academy · Lezione

Classi di eccezioni personalizzate

Definisca i propri tipi di eccezione per comunicare gli errori più chiaramente.

Classi di eccezioni personalizzate è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Introduzione

Le classi di eccezioni personalizzate rendono la gestione degli errori esplicita, autoesplicativa e facile da gestire con precisione per chi utilizza il codice.

Perché usare eccezioni personalizzate

Le eccezioni integrate sono troppo generiche. Quelle personalizzate consentono a chi usa la libreria di intercettare solo gli errori della PROPRIA libreria, senza intercettare quelli non correlati.
class AppError(Exception):
    pass
raise AppError('something went wrong')

Ereditarietà da Exception

class MyError(Exception): pass è tutto ciò che serve. Erediti sempre da Exception, non da BaseException.
class ValidationError(Exception):
    pass
try:
    raise ValidationError('email is invalid')
except ValidationError as e:
    print(e)

Aggiunta di attributi personalizzati

class APIError(Exception): def __init__(self, status, message): self.status = status; super().__init__(message)
class APIError(Exception):
    def __init__(self, status, message):
        self.status = status
        super().__init__(message)
try:
    raise APIError(404, 'Not found')
except APIError as e:
    print(e.status, e)

Gerarchia delle eccezioni

Costruisca una gerarchia: class DBError(AppError): pass — chi utilizza il codice può intercettare AppError per qualsiasi errore dell'applicazione oppure DBError in modo specifico.
class AppError(Exception): pass
class DBError(AppError): pass
class NetworkError(AppError): pass
try:
    raise DBError('timeout')
except AppError as e:
    print('app error:', e)

Metodo __str__ personalizzato

Sovrascriva __str__ per controllare l'aspetto del messaggio dell'eccezione quando viene stampato.
class RangeError(ValueError):
    def __init__(self, val, lo, hi):
        self.val, self.lo, self.hi = val, lo, hi
    def __str__(self):
        return f'{self.val} not in [{self.lo}, {self.hi}]'
print(RangeError(15, 0, 10))

Sollevamento di eccezioni personalizzate

Usi raise nelle proprie funzioni per segnalare errori specifici del dominio. In questo modo crea un'API chiara per chi utilizza il codice.
class InsufficientFundsError(Exception):
    def __init__(self, needed, available):
        super().__init__(f'Need {needed}, have {available}')
def withdraw(balance, amount):
    if amount > balance:
        raise InsufficientFundsError(amount, balance)
    return balance - amount
try:
    withdraw(100, 200)
except InsufficientFundsError as e:
    print(e)

Intercettazione tramite la classe base

except AppError intercetta tutte le sottoclassi: DBError, NetworkError e così via. La gerarchia consente di scegliere il livello di specificità.
class AppError(Exception): pass
class DBError(AppError): pass
try:
    raise DBError('conn failed')
except AppError:
    print('any app error')

Eccezioni con un gestore di contesto

Le eccezioni personalizzate si integrano con i gestori di contesto: class suppressed: __exit__ restituisce True per sopprimere l'eccezione.
class SuppressValue(Exception): pass
try:
    raise SuppressValue('ignored')
except SuppressValue:
    pass  # suppress silently
print('continued')

Documentazione delle eccezioni personalizzate

Documenti QUANDO sollevarle e COSA significano i relativi attributi. Buone docstring rendono utilizzabili le eccezioni personalizzate.
class ConfigError(Exception):
    """Raised when configuration is invalid.
    Attributes:
        key: The invalid config key
    """
    def __init__(self, key, msg):
        super().__init__(msg)
        self.key = key

Buone pratiche

Mantenga la gerarchia poco profonda (2-3 livelli). Erediti sempre da Exception. Usi nomi descrittivi che terminano in Error. Inserisca le eccezioni in un modulo dedicato exceptions.py.
# Good structure:
class AppError(Exception): pass
class ValidationError(AppError): pass
class NotFoundError(AppError): pass
print('hierarchy demo')

Verifica rapida

Da quale classe dovrebbero ereditare le eccezioni personalizzate per evitare di intercettare gli eventi che terminano il sistema?

Riepilogo

Eccezioni personalizzate: ereditano da Exception, aggiungono attributi in __init__ e sovrascrivono __str__. Costruisca gerarchie per facilitarne l'intercettazione. Le inserisca nel modulo exceptions.py.

Continui così

Ottimo lavoro! Passi alla lezione successiva per continuare a fare progressi.

Domande Frequenti

La lezione «Classi di eccezioni personalizzate» è gratuita?

Sì — il testo completo di «Classi di eccezioni personalizzate» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Classi di eccezioni personalizzate»?

Definisca i propri tipi di eccezione per comunicare gli errori più chiaramente. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Classi di eccezioni personalizzate»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Comprendere le eccezioni
  2. try / except / else / finally
  3. Sollevamento e nuovo sollevamento delle eccezioni
  4. Classi di eccezioni personalizzate
← Torna a Python Academy