El registro puede utilizarse de manera similar para hacer declaraciones. Puede proporcionar información de depuración en tiempo de ejecución y mejorar potencialmente su documentación ejecutable. Aunque, el registro no es exactamente como las afirmaciones. Tiene algunos beneficios adicionales.
1. Aumento de la granularidad de control
El módulo de registro de Python es muy completo y personalizable. Puede enviar mensajes a varios niveles diferentes y cada nivel puede ser activado y desactivado a voluntad. Así, puedes considerar algunas situaciones más severas que otras y puedes codificar esto con niveles de registro.
Recuerde, este no es el caso de los asertos porque se basan en el modo de depuración.
2. Más Control Dinámico
El registro le permite leer su nivel de registro desde casi cualquier lugar. Algunos lugares comunes son un archivo de configuración, una variable de entorno o una base de datos. Esta flexibilidad le permite controlar cuánta información de registro ve sin tener que volver a ejecutar o redistribuir su aplicación.
En cambio, Python no permite asignar dinámicamente a la constante de depuración para las declaraciones de afirmación. Por lo tanto, no puedes activar y desactivar los asertos sin volver a ejecutar la aplicación.
Vale la pena considerar esto cuando decidas tu estrategia de codificación defensiva. El control de registro dinámico es especialmente importante si tienes un mecanismo de distribución «alternativo» como el PyInstaller.
3. Salvar silenciosamente las huellas
Es útil tener información de rastreo y depuración en el momento de una falla y el uso de registros inteligentes puede hacer esto por usted casi automáticamente.
Este concepto se demuestra en un gran puesto de manejo de excepciones de Doug Hellman:
1234567891011```pythondef main(): logging.basicConfig(level=logging.WARNING) log = logging.getLogger($0027ejemplo$0027) try: throws() return 0 except Excepción, err: log.exception($0027Error de throws():$0027) return 1````
La llamada a log.exception añade automáticamente la información de la excepción para nosotros. Entonces, podríamos configurar el registrador para poner los rastros y las excepciones en un archivo de registro separado para su posterior inspección sin toda la información y advertencias normales.
Este archivo de excepción podría contener una excelente información de depuración si se habilita en el código de producción. Esto abre muchas posibilidades interesantes para la extracción de estos datos de registro:
- Descubra a los usuarios probando diferentes permutaciones de características que nunca hemos probado o incluso considerado, lo que podría llevar a añadir nuevas características para facilitar los casos de uso común.
- Encontrar errores comunes debidos a un malentendido que los usuarios tienen sobre el funcionamiento de la aplicación, lo que podría llevar a escribir una mejor documentación para el usuario.
4. Combinaciones de nivel superior con aserciones
También puedes usar afirmaciones en tándem con tu registro. Por ejemplo, puede ejecutar su aplicación en el modo de depuración predeterminado y luego capturar y registrar su AssertionError en un archivo diferente. Esto podría dar lugar a más posibilidades de minería de datos, como descubrir una suposición ambiental que tiene sobre la plataforma en la que se está ejecutando.
Estos son sólo algunos usos para el registro en el contexto de la programación defensiva. De hecho, podrías usar el logging para crear soluciones de baja fidelidad para todo tipo de problemas, lo cual es otro post en sí mismo.
Tengan en cuenta que la mayoría de los usuarios no rellenan las encuestas. Por lo tanto, esta sería una manera de recopilar información sobre las características que están tratando de utilizar o los flujos de trabajo comunes. Entonces, podrías mejorarlos en futuras versiones.