Seite 1 von 1

Aufrufer einer Funktion festellen ?

Verfasst: Freitag 29. September 2023, 20:17
von tomZ
Hallo,

ist es in Python (3) möglich in einer Funktion oder Methode festzustellen wer bzw, von wo aus diese Funktion oder Methode aufgerufen wurde ?

Beste Grüße
tom

Re: Aufrufer einer Funktion festellen ?

Verfasst: Freitag 29. September 2023, 20:19
von sparrow
Warum?
Das ist nämlich ein bisschen ungewöhnlich und könnte seinen Grund in einer falschen Architektur haben.

Re: Aufrufer einer Funktion festellen ?

Verfasst: Freitag 29. September 2023, 21:37
von grubenfox
@tomZ: schon mal einen Blick in das Modul "traceback" geworfen?

Re: Aufrufer einer Funktion festellen ?

Verfasst: Samstag 30. September 2023, 17:44
von pillmuncher
grubenfox: Bitte keine Footguns verteilen.

Re: Aufrufer einer Funktion festellen ?

Verfasst: Samstag 30. September 2023, 19:15
von tomZ
@grubenfox
Vielen Dank für Deine Hilfe, das war genau das was ich suchte.... und was mir weiterhalf.

Beste Grüße
tom

Re: Aufrufer einer Funktion festellen ?

Verfasst: Samstag 30. September 2023, 19:29
von __deets__
Let the foot shooting commence.

Re: Aufrufer einer Funktion festellen ?

Verfasst: Samstag 30. September 2023, 19:55
von Sirius3
@tomZ: Tracebacks sind nur für's Debugging oder Logging, da das ja automatisch funktioniert, muß man sich damit meist nicht selbst beschäftigen.
Deshalb NOCHMAL die Frage, die sparrow schon gestellt hat:
Was für ein Problem möchtest Du lösen?
Wenn Du jetzt nichts sagst, dass Du einen Debugger schreiben möchtest, dann ist die Antwort von grubenfox falsch, und Du solltest dringend näher beschreiben, was Du machen möchtest, damit wir die richtige Lösung finden.

Re: Aufrufer einer Funktion festellen ?

Verfasst: Sonntag 1. Oktober 2023, 09:40
von tomZ
Hallo,

der Grund meiner Frage war dass ich eine Methode habe die öfter, als von mir angenommen, aufgerufen wird.
Meine Idee war nun, dass der schnellste Weg um herauszufinden warum dem so ist, es wäre - einfach die Methode sagen zu lassen von wem/von wo aus sie aufgerufen wurde...

Und diese gewollte Information gewann ich durch:

Code: Alles auswählen

 print (traceback.StackSummary.extract(traceback.walk_stack(None)))

diese Codezeile wurde natürlich wieder entfernt, diente ja nur zum Testen des oben Beschriebenen...

Sorry, wenn ich da für etwas Verwirrung und Befürchtungen sorgte, vermutlich war das was ich beabsichtigte und wie es von mir umgesetzt wurde, relativ harmlos ?

Beste Grüße
tom

Re: Aufrufer einer Funktion festellen ?

Verfasst: Sonntag 1. Oktober 2023, 11:39
von Sirius3
Genau, das ist Debugging und dafür ist das ja ok.
Den Aufrufer zu finden, geht über inspect:

Code: Alles auswählen

stack = inpsect.stack()
print(f"Aufrufer: {stack[1].function} in {stack[1].filename} ({stack[1].lineno})")

Re: Aufrufer einer Funktion festellen ?

Verfasst: Mittwoch 4. Oktober 2023, 17:39
von tomZ
Vielen Dank, so siehts gleich westentlich übersichtlicher aus

da war nur ein kleinen Tippfehler: ( inpsect statt inspect )

Hier korrigiert, falls das jemand mal benötigt:

Code: Alles auswählen

stack = inspect.stack()
print(f"Aufrufer: {stack[1].function} in {stack[1].filename} ({stack[1].lineno})")