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?
rausfinden von wem eine funktion aufgerufen wurde
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
ah... dankeschoen... das ich mir das getframe aber auch nie vor augen halte
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Und ich würde es als Hack bezeichnen, den man besser nicht in Produktionscode benutzt. Wozu brauchst Du das?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Interessant, getframe kannte ich nicht, ich verwende in solchen Fällen immer:
Alles Gute
Ramin
Code: Alles auswählen
import traceback
print traceback.print_stack(limit=3)
Ramin
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
Atomkraftwerkaktienbesitzer
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Das ist aber nicht, was nkoehring wollte.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
Ich bin für die _getframe Lösung. Das was du willst klingt nach Debugging und dafür sind Frame Objekte wie geschaffen.
TUFKAB – the user formerly known as blackbird
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
ü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...
aber naja... spricht nix dagegen nochmehr moeglichkeiten aufzuzaehlen...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2