Las declaraciones impresas son lo peor de ambos mundos , ya que combinan los aspectos negativos de un depurador en línea con la instrumentación de diagnóstico. Tienes que modificar el programa pero no obtienes más código útil de él.
Un depurador en línea le permite inspeccionar el estado de un programa en ejecución; Pero lo bueno de un depurador real es que no es necesario modificar la fuente; ni antes ni después de la sesión de depuración; Simplemente carga el programa en el depurador, dile al depurador dónde quieres buscar y listo.
Instrumentar la aplicación puede requerir algo de trabajo por adelantado, modificando el código fuente de alguna manera, pero la salida de diagnóstico resultante puede tener una enorme cantidad de detalles y se puede activar o desactivar en un grado muy específico. El módulo de registro de Python puede mostrar no solo el mensaje registrado, sino también el archivo y la función que lo llamó, un rastreo si lo hubo, la hora real en que se emitió el mensaje, etc. Más que eso; no es necesario retirar nunca la instrumentación de diagnóstico ; Es tan válido y útil cuando el programa está terminado y en producción como lo fue el día en que se agregó; pero puede tener su salida atascada en un archivo de registro donde no es probable que moleste a nadie, o el nivel de registro se puede bajar para mantener fuera todos los mensajes excepto los más urgentes.
anticipar la necesidad o el uso de un depurador no es realmente más difícil que usar ipython mientras estás probando y familiarizarte con los comandos que utiliza para controlar el depurador pdb integrado.
Cuando piense que una declaración de impresión podría ser más fácil que usar pdb (como suele ser), encontrará que el uso de un registrador lleva su programa a un estado mucho más fácil de trabajar que si usa y luego elimina las declaraciones de impresión .
Tengo mi editor configurado para resaltar declaraciones de impresión como errores de sintaxis y declaraciones de registro como comentarios, ya que así es como las considero.