Ich baue gerade ein ziemlich komplexes System in Python, und wenn ich debugge, gebe ich oft einfache Druckanweisungen in mehrere Skripte. Um den Überblick zu behalten, möchte ich oft auch den Dateinamen und die Zeilennummer ausdrucken, wo sich die Druckanweisung befindet. Ich kann natürlich tun, manuell oder mit etwas wie folgt aus:Python-Debugging: Dateiname und Zeilennummer, von der eine Funktion aufgerufen wird?
from inspect import currentframe, getframeinfo
print getframeinfo(currentframe()).filename + ':' + str(getframeinfo(currentframe()).lineno) + ' - ', 'what I actually want to print out here'
die druckt etwas wie:
filenameX.py:273 - was ich will eigentlich hier auszudrucken
um es einfacher zu machen, möchte ich in der Lage sein, etwas zu tun wie:
print debuginfo(), 'what I actually want to print out here'
Also habe ich es in eine Funktion irgendwo setzen und versuchte zu tun:
from debugutil import debuginfo
print debuginfo(), 'what I actually want to print out here'
print debuginfo(), 'and something else here'
leider bekomme ich:
debugutil.py:3 - what I actually want to print out here
debugutil.py:3 - and something else here
Es druckt den Dateinamen und die Zeilennummer, an dem ich die Funktion definiert ist, statt der Zeile, auf der ich debuginfo() anrufe. Dies ist offensichtlich, da sich der Code in der Datei debugutil.py befindet.
Also meine Frage ist eigentlich: Wie bekomme ich den Dateinamen und die Zeilennummer, von denen diese debuginfo() Funktion aufgerufen wird? Alle Tipps sind willkommen!
Verwenden das Modul 'logging' und konfigurieren Sie den Formatierer: https://docs.python.org/2/library/logging.html#logrecord-attributes. Das Tornado-Web-Framework hat tatsächlich ein Format, das diesem sehr ähnlich ist, also könnten Sie wahrscheinlich ihren Code verwenden: http://tornado.readthedocs.org/en/latest/_modules/tornado/log.html#LogFormatter – Blender