raw_input - print en python 3
Python: ¿Debo usar ValueError o crear mi propia subclase para manejar cadenas inválidas? (6)
Posible duplicado:
¿Qué excepción debo plantear sobre las combinaciones de argumentos malos / ilegales en Python?
Revisé las excepciones integradas de python y lo único que parece cerrado es ValueError.
de la documentación de python:
excepción ValueError: se genera cuando una función o función incorporada recibe un argumento que tiene el tipo correcto pero un valor inapropiado, y la situación no se describe con una excepción más precisa como IndexError.
¿Debo crear una subclase de ValueError, como InvalidFormatException?
(Mi caso particular es si una cadena de números romanos está mal formateada, pero hay muchos otros casos aplicables).
EDITAR: parece que ValueError es la elección correcta, ahora el problema es si usar ValueError directamente o subclasificarlo.
Bueno, realmente depende de si desea (o necesita) que esa excepción particular sea capturable independientemente de otros ValueError
que puedan ocurrir durante la invocación de su código. También depende de si usted es el único consumidor de su código o si está destinado a que otras personas lo utilicen; en el último caso, puede ser útil para estas personas si define algunas excepciones específicas de bibliotecas de alto nivel que pueden verificar.
Sí. ;-) ValueError
suena como el más aplicable de los integrados, y con una subclase de eso parece que estás haciendo lo mejor posible. También es lo que fi ''%q'' % 1
plantearía.
También apoyo ValueError para este caso. Mis 2 centavos.
ValueError parece lógico:
In [1]: int(''abc'')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython console> in <module>()
ValueError: invalid literal for int() with base 10: ''abc''
Voto por crear una subclase única, InvalidFormatException.
ValueError, mientras que es verdadero, es vago.
InvalidFormatException es más específico y está directamente relacionado con su problema.
Un usuario podría terminar con situaciones en las que está haciendo algo que podría producir cualquier error. Podrían estar convirtiendo números romanos y luego haciendo algunas matemáticas. Es posible que necesiten distinguir entre ValueError y InvalidFormatException.
ValueError
es una buena ValueError
para el caso que tienes. Simplemente acéptelo y recuerde que puede especificar un mensaje útil como argumento, lo que le permite distinguirlo de otros tipos de ValueError.
Sin embargo, no haría el código más complicado definiendo una subclase, a menos que tuviera una buena razón para querer detectar ese error en particular, pero evité atrapar cualquier otro ValueErrors. Muchas aplicaciones tienen docenas de condiciones de error "especiales", pero si también definieran subclases por caso, el código se volvería rápidamente inmanejable y cualquiera que intentara usar las rutinas se sorprendería constantemente por las nuevas excepciones inesperadas.