En mi código hay unos siete lugares donde planteo una excepción. Todas estas excepciones se tratan de la misma manera: imprime un error en el archivo de registro, devuelve el estado del software al predeterminado y sal.
Durante la revisión del código, mi ingeniero senior, a quien valoro mucho, dijo que debería subclasificar todas estas excepciones. Su argumento es que en el futuro podríamos querer manejar las excepciones de manera diferente y eso será más fácil.
Mi argumento es que actualmente solo saturará nuestro código y, dado que no sabemos si alguna vez manejaremos las excepciones de manera diferente, deberíamos dejar el código conciso y, si llega el momento, entonces y solo entonces deberíamos subtipo .
Me gustaría escuchar cualquier argumento para cada caso.
Exception
, por ejemplo, o errores integrados más específicos?Respuestas:
Tienes razón
Robert Harvey ya menciona el argumento de su lado: no agregue el código que no necesita en este momento, especialmente porque es fácil agregarlo más tarde.
Tu crítico también tiene razón
Por otro lado, el punto del revisor también es comprensible:
Devolver un genérico
Exception()
no es muy útil para la persona que llama: mientras que la descripción de la excepción indica a un humano lo que está sucediendo, tratar excepciones de manera diferente mediante programación puede ser imposible. El desarrollador que usa su código puede ser reacio a cambiar los tipos de excepciones , incluso por miedo (justificado o no) a romper algo.Tenga en cuenta que agregar excepciones personalizadas en este momento no es tan difícil :
es todo lo que necesitas. Eso es solo dos líneas de código (dado que es posible que ni siquiera necesite crear un archivo separado si coloca excepciones personalizadas en un archivo).
El código en sí se ve mejor, más legible.
parece un poco más legible en comparación con:
debido a la indicación del tipo de excepción:
En la segunda parte del código, necesito leer la descripción y adivinar que el precio está fuera de rango (¿o tal vez no? ¿Tal vez hay casos en los que el precio puede ser negativo, como los reembolsos?)
En la primera parte del código, un vistazo sobre el tipo da una indicación inmediata sobre el error. Parece que hay un conjunto de valores permitidos para un precio, y el valor actual está fuera de este conjunto.
¿Entonces?
Entonces:
Ambos enfoques son válidos. Si no subclasifica las excepciones cuando no necesita tipos personalizados, tiene razón. Cuando subclases las excepciones porque no cuesta nada hacerlo y puede ser útil más adelante, tienes razón.
Sea consistente con su equipo. Si su equipo usa excepciones personalizadas ampliamente, úselas.
fuente
raise ValueError('The price is less than zero')
. Esto es más específico que la baseException
, pero sin ningún problema.