En una clase de Python, ¿qué tipo de error debo plantear desde un método de instancia cuando se deben cambiar algunos de los otros atributos de la clase antes de ejecutar ese método?¿Qué error generar cuando el estado de la clase no es válido?
Vengo de un fondo de C# donde usaría InvalidOperationException
, "la excepción que se produce cuando una llamada de método no es válida para el estado actual del objeto", pero no pude encontrar un equivalente built-in exception in Python.
He estado planteando ValueError
("se produce cuando una función o función incorporada recibe un argumento que tiene el tipo correcto pero un valor inapropiado") cuando el problema es con los parámetros de la función. Supongo que técnicamente es un valor inválido para el parámetro self
; ¿Es esa la forma correcta de tratarlo? Por ejemplo, ¿esto es idiomático: raise ValueError("self.foo must be set before running self.bar()")
?
ValueError me parece bien. Está lo suficientemente cerca para que un usuario identifique su asociación con el problema. Tampoco es como si Python te pegara en la muñeca por usar la excepción incorrecta. Esto es lo suficientemente cerca para separarse de otros errores. – jdi
¿Por qué no hacer su propia excepción si siente la necesidad de dar más detalles? –
@LattyWare: He visto las conversaciones engañosas sobre la subclasificación willy nilly de nuevos tipos de excepciones. Sugieren que hay muchas construcciones internas y solo agrega complejidad. – jdi