Aktuelle Quellcodezeile auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Theo
User
Beiträge: 17
Registriert: Montag 24. August 2009, 16:11
Kontaktdaten:

Moin zusammen,

ich nutze Python 2.5 im einem Simulator als Skriptsprache. Da dieser nahezu keine Debugmöglichkeit bietet, habe ich mir eine Logging Klassen geschrieben. Funktioniert soweit auch ganz gut. Nun zu meiner Frage.

Besteht irgendwie die Möglichkeit die aktuelle Quellcodezeile auszulesen?

Hier ein kurzes Beispiel:

Code: Alles auswählen

1 def X():
2   print 'current code line:', ???
3 
4 X()
das Ergebnis sollte sein
'current code line: 2'

Also sprich dort wo jetzt die ??? stehen haette ich gern eine Methode zum auslesen der aktuellen Codezeile im Skript.

Auf der folgenden Seite habe ich auch etwas dazu gefunden. Leider ist es nicht ganz das was ich gesucht habe.
http://www.dalkescientific.com/writings ... _code.html

Ich hoffe mir kann da jmd helfen :wink:

Viele Dank jedenfalls schonmal im Voraus.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

import sys
sys._getframe().f_lineno
Allerdings ist die Funktion nur in CPython verfügbar und auch dort als privat anzusehen.
Aber vielleicht tut es ja, was du haben willst.
Theo
User
Beiträge: 17
Registriert: Montag 24. August 2009, 16:11
Kontaktdaten:

Perfekt, ist genau das was ich gesucht habe.

btw. eine Frage noch. Wenn das gehen würde, dass wäre es noch besser

Code: Alles auswählen

1 def X():
2   print 'current code line', ???
3
4 def Y():
5   X() 
6 
7 Y()
Ziel sollte sein:
'current code line: 5'

Also sprich nicht genau die Codezeile wo das 'print' ist auszugeben, sondern die Zeile von der Funktion von der das X() aufgerufen wurde. Ich weiss, ich könnte die Zeile beim Funktionsaufruf einfach mit übergeben, aber genau das will ich dadurch umgehen, in dem ich herausbekommen von welcher Codezeile dir Funktion aufgerufen wurde.
BlackJack

@Theo: Schau Dir doch mal an was `sys._getframe()` zurückliefert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann musst du auch den, Frame ueber der Funktion fragen, sprich `_getframe(1)` nutzen.
Achtung: Funktioniert nicht aus einer REPL (zumindest haben mit ipython und bpython in die irre gefuehrt).
Theo
User
Beiträge: 17
Registriert: Montag 24. August 2009, 16:11
Kontaktdaten:

Danke fuer die Hinweise. Funktioniert so wie ich es mir vorgestellt hab

:mrgreen:
Antworten