Me preguntaba acerca de las mejores prácticas para indicar combinaciones de argumentos no válidos en Python. Me he encontrado con algunas situaciones donde se tiene una función de este modo:¿Qué excepción debo plantear en las combinaciones de argumentos malos/ilegales en Python?
def import_to_orm(name, save=False, recurse=False):
"""
:param name: Name of some external entity to import.
:param save: Save the ORM object before returning.
:param recurse: Attempt to import associated objects as well. Because you
need the original object to have a key to relate to, save must be
`True` for recurse to be `True`.
:raise BadValueError: If `recurse and not save`.
:return: The ORM object.
"""
pass
La única molestia con esto es que cada paquete tiene su propia, por lo general ligeramente diferentes BadValueError
. Sé que en Java existe java.lang.IllegalArgumentException
- ¿Está bien entendido que todos crearán sus propios BadValueError
s en Python o hay otro método preferido?
Estoy de acuerdo: casi siempre uso ValueError para cosas como esta, también. – mipadi
> "¿por qué no usar eso?" - Especificidad. Quizás quiera capturar en alguna capa externa "MyValueError", pero no en ninguno/todos "ValueError". –
Sí, así que parte de la cuestión de la especificidad es dónde más se levanta ValueError. Si a la función llamada le gustan sus argumentos pero llama a math.sqrt (-1) internamente, una persona que llama puede estar atrapando ValueError. Espere que * sus * argumentos sean inapropiados. Tal vez solo verifique el mensaje en este caso ... – cdleary