Python ha molte convenzioni forti ma non sono chiaro su come gestire al meglio le eccezioni per il mio modulo. So che è generalmente buona norma definire un'eccezione personalizzata per il tuo modulo. Per esempio:.
class MyError(Exception):
pass
Tuttavia, quello su cui non sono chiaro è come dovrebbero essere specifiche le classi di eccezioni? Ogni percorso di codice che provoca un errore deve avere una propria classe di eccezioni? O è meglio usare solo alcuni? Una gerarchia di eccezioni in cui ogni eccezione "foglia" eredita da un'eccezione genitoriale un po 'più generica consentirebbe agli utenti del modulo di decidere quanto sia precisa la loro gestione delle eccezioni, ma posso vedere come questo potrebbe diventare complicato da gestire.
So che alcuni moduli utilizzano codici di errore per distinguere tra diversi errori che utilizzano la stessa classe, che viene usata in questo modo:
try:
mymodule.do_something()
except mymodule.MyError as error:
if error.code == mymodule.SPECIFIC_ERROR_CODE:
handle_error()
else:
raise
Ma mi sembra sbagliato, a meno che tu non stia simulando in modo appropriato un'altra libreria.
C'è un modo ideale per gestire questo? Oppure questa domanda dipende troppo dalla situazione per una best practice generica?