A veces, un depurador es excelente, pero a veces el uso de declaraciones de impresión es más rápido y más fácil de configurar y usar repetidamente.
Esto sólo puede ser adecuado para la depuración con CPython (ya que no todos los pitones implementan inspect.currentframe
y inspect.getouterframes
), pero me parece que esto útil para la reducción en la tipificación:
En utils_debug.py:
import inspect
def pv(name):
record=inspect.getouterframes(inspect.currentframe())[1]
frame=record[0]
val=eval(name,frame.f_globals,frame.f_locals)
print('{0}: {1}'.format(name, val))
Luego, en su script.py:
from utils_debug import pv
Con esta configuración, se puede reemplazar
print("a_variable_name: %s' % a_variable_name)
con
pv('a_variable_name')
Tenga en cuenta que el argumento de pv
debería ser la cadena (nombre de la variable, o expresión), no el valor en sí.
Para eliminar estas líneas usando Emacs, se podría
C-x ( # start keyboard macro
C-s pv('
C-a
C-k # change this to M-; if you just want to comment out the pv call
C-x) # end keyboard macro
A continuación, puede llamar a la macro una vez con C-x e
o mil veces con C-u 1000 C-x e
Por supuesto, hay que tener cuidado de que de hecho, quiero eliminar todas las líneas que contienen pv('
.
Después de todos estos años y tropezando nuevamente con esta pregunta, finalmente lo entiendo, ¡lo que necesitábamos todo el tiempo eran macros sintácticas! es decir. en [# julia-lang] (http://stackoverflow.com/questions/tagged/julia-lang): '@show foo = 1.0 + 3im/2' prints; 'foo = 1.0 + (3im)/2 = 1.0 + 1.5im', donde '@ show' es una macro y se puede usar para anotar cualquier expresión (en Julia todo es una expresión), puede ver el código generado a partir de la expansión de macro aquí: https://git.io/vgDch I encontré esta implementación de macros sintácticas para Python: https://github.com/lihaoyi/macropy pero la metaprogramación de Julia es la mejor! – SalchiPapa