Seite 1 von 1
rausfinden von wem eine funktion aufgerufen wurde
Verfasst: Montag 26. Februar 2007, 23:31
von nkoehring
Hallo... wie der Titel schon sagt, wuerde ich gern wissen, von wo eine Funktion aufgerufen wurde. Also einmal vom Framework direkt oder von einer meiner bestehenden Funktionen.
Also kann das beispielsweise meine Funktion bla() rausfinden, ohne das ihr ihr nen Parameter uebergeben muss?
Verfasst: Dienstag 27. Februar 2007, 00:01
von Leonidas
Geht etwa so:
Code: Alles auswählen
In [40]: def showcaller():
....: print sys._getframe(1).f_code.co_name
....:
In [41]: def mycaller():
....: showcaller()
....:
In [49]: mycaller()
mycaller
Verfasst: Dienstag 27. Februar 2007, 00:06
von nkoehring
ah... dankeschoen... das ich mir das getframe aber auch nie vor augen halte

Verfasst: Dienstag 27. Februar 2007, 00:09
von BlackJack
Und ich würde es als Hack bezeichnen, den man besser nicht in Produktionscode benutzt. Wozu brauchst Du das?
Verfasst: Dienstag 27. Februar 2007, 00:10
von Leonidas
Ja, ´´sys._getframe´´ ist ein interessantes Werkzeug, daher ist in dessen Dokumentation auch eine Warnung drin und es beginnt mit einem Unterstrich:
_getframe-Dokumentation hat geschrieben:This function should be used for internal and specialized purposes only.
Verfasst: Dienstag 27. Februar 2007, 00:55
von ramin
Interessant, getframe kannte ich nicht, ich verwende in solchen Fällen immer:
Alles Gute
Ramin
Verfasst: Dienstag 27. Februar 2007, 09:00
von Ene Uran
Etwas einfacher:
Code: Alles auswählen
# which module did a function come from?
import inspect
from math import * # sin() etc.
def test():
pass
print inspect.getmodule(test).__name__ # __main__
print inspect.getmodule(sin).__name__ # math
Verfasst: Dienstag 27. Februar 2007, 09:07
von mitsuhiko
Ene Uran hat geschrieben:Etwas einfacher:
Code: Alles auswählen
# which module did a function come from?
import inspect
from math import * # sin() etc.
def test():
pass
print inspect.getmodule(test).__name__ # __main__
print inspect.getmodule(sin).__name__ # math
Das ist aber nicht, was nkoehring wollte.
Ich bin für die _getframe Lösung. Das was du willst klingt nach Debugging und dafür sind Frame Objekte wie geschaffen.
Verfasst: Dienstag 27. Februar 2007, 21:25
von nkoehring
übrigens... erstmal danke fuer all die weiteren antworten... aber ich muss auch zugeben, dass ich die _getframe-Methode perfekt fuer meine ansprueche find
aber naja... spricht nix dagegen nochmehr moeglichkeiten aufzuzaehlen...