In una classe Python, quale tipo di errore dovrei sollevare da un metodo di istanza quando alcuni degli altri attributi della classe devono essere modificati prima di eseguire quel metodo?Che errore si genera quando lo stato della classe non è valido?
Provengo da uno sfondo C# in cui vorrei usare InvalidOperationException
, "l'eccezione che viene generata quando una chiamata di metodo non è valida per lo stato corrente dell'oggetto", ma non ho trovato un equivalente built-in exception in Python.
Sto sollevando ValueError
("generato quando un'operazione o una funzione incorporata riceve un argomento che ha il tipo giusto ma un valore inappropriato") quando il problema riguarda i parametri della funzione. Suppongo che questo sia tecnicamente un valore non valido per il parametro self
; è questo il modo giusto per trattarlo? Ad esempio, è questo idiomatico: raise ValueError("self.foo must be set before running self.bar()")
?
ValueError mi sembra buono. È abbastanza vicino perché un utente possa identificarne l'associazione con il problema. Inoltre non è come il pitone che ti schiaffeggia al polso per usare l'eccezione sbagliata. Questo è abbastanza vicino da separare da altri errori. – jdi
Perché non creare la propria eccezione se si sente la necessità di fornire maggiori dettagli? –
@LattyWare: ho visto i dialoghi canticchiare la sottoclasse di nuovi tipi di eccezioni. Suggeriscono che ci sono molti builtins e aggiunge solo complessità. – jdi