Manchmal ist ein Debugger großartig, aber manchmal ist die Verwendung von Druckanweisungen schneller und einfacher einzurichten und wiederholt zu verwenden.
In 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))
nur Dies kann für das Debuggen mit CPython (da nicht alle Pythons implementieren inspect.currentframe
und inspect.getouterframes
), aber ich finde dies nützlich für eine Senkung auf Typisierung geeignet sein
Dann in Ihrem script.py:
from utils_debug import pv
Mit dieser Einrichtung können Sie ersetzen
print("a_variable_name: %s' % a_variable_name)
mit
pv('a_variable_name')
Hinweis, daß das Argument zu pv
sollte die Zeichenfolge (Variablennamen oder Ausdruck), nicht der Wert selbst.
Um diese Linien mit Emacs zu entfernen, Sie
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
Dann könnten Sie das Makro einmal mit C-x e
oder tausendmal mit C-u 1000 C-x e
Natürlich muss man vorsichtig sein, dass Sie anrufen möchte in der Tat alle Zeilen entfernen, die pv('
enthalten.
Nach all den Jahren und wieder mit dieser Frage zu stolpern, habe ich es endlich verstanden, was wir immer gebraucht haben, waren syntaktische Makros! dh. in [# julia-lang] (http://stackoverflow.com/questions/tagged/julia-lang): '@show foo = 1.0 + 3im/2' Drucke; 'foo = 1,0 + (3im)/2 = 1,0 + 1.5im', wobei '@ show' ein Makro ist und verwendet werden kann, um einen beliebigen Ausdruck zu ändern (in Julia ist alles ein Ausdruck), können Sie den aus der Makroerweiterung erzeugten Code hier sehen: https://git.io/vgDch I fand diese Implementierung von syntaktischen Makros für Python: https://github.com/lihaoyi/macropy aber Julia Metaprogrammieren ist das Beste! – SalchiPapa