2011-05-20 15 views
8

tengo estos archivos en mi proyecto:Python - buena práctica para detectar errores

- main.py 
- module1.py 
- module2.py 

main es el archivo principal que será directamente ejecutar en la consola.

module1 se importará en main y arroja Module1Exception.

module2 se exportará a module1, lanza Module2Exception y utiliza lib que lanza NormalException y CriticalException excepciones.

En todas las excepciones, la aplicación debe salir.

¿Qué opción es la forma más efectiva de detectar esos errores?
a) Todas las excepciones serán capturas en main, el mensaje de impresión y salir
b) Lets permiten que los módulos para atrapar excepciones (module2 captura excepciones lib, module1 solo con captura Module2Exception y main captura Module1Exception), el mensaje de impresión y salir .
c) Como b, excepto que los módulos no saldrá, en lugar devuelve False y salida se llamará en main

Editar:

Esta aplicación lado va a ser servidor, ejecute como demonio . Espero que en el futuro use varios servidores con monitoreo global de registros, como Flume o Scribe. Las excepciones deben ser atrapadas. Estos archivos son solo un ejemplo. De hecho, estoy escribiendo una gran aplicación que actúa como un tipo de servidor. En este momento escribo el módulo para cargar y analizar el archivo de configuración. En este caso, el script debe salir si se generan excepciones. Y solo en este caso. Después de cargar los archivos de configuración y pasar las pruebas, la secuencia de comandos se dejará desatendida.

+3

¿Por qué los atrapas? A menos que haya un ** motivo ** para atraparlos, debes dejar que se propaguen. "imprimir mensaje y salir" es lo que sucede cuando no escribe ningún código de manejo de excepción. ¿Que estas preguntando? –

+1

Por ejemplo, si obtengo 'IOError' mientras leo el archivo, me gusta informar al usuario qué archivo provocó una excepción. También me gustan los mensajes bonitos, no los datos de excepción en bruto :) – Galmi

+0

@Galmi: "me gustan los mensajes bonitos, no los datos de excepción en bruto". No es información muy útil. Obtienes IOError. ¿Y que? ¿Detener? ¿Cambiar algo e intentarlo de nuevo? La forma más "efectiva" de detectar excepciones depende de (a) qué excepción y (b) qué va a hacer con respecto a la excepción. No hay una regla simple y simple. Depende de lo que vas a hacer. –

Respuesta

14

main debe tener la responsabilidad de terminar, no los módulos.

¿Qué sucede si desea importar esos módulos en otro proyecto y no desea desea finalizar la aplicación en una excepción?

Cuestiones relacionadas