Aufrufer einer Funktion festellen ?

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
tomZ
User
Beiträge: 9
Registriert: Samstag 16. September 2023, 20:16

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
Benutzeravatar
sparrow
User
Beiträge: 4231
Registriert: Freitag 17. April 2009, 10:28

Warum?
Das ist nämlich ein bisschen ungewöhnlich und könnte seinen Grund in einer falschen Architektur haben.
Benutzeravatar
grubenfox
User
Beiträge: 436
Registriert: Freitag 2. Dezember 2022, 15:49

@tomZ: schon mal einen Blick in das Modul "traceback" geworfen?
Benutzeravatar
pillmuncher
User
Beiträge: 1485
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

grubenfox: Bitte keine Footguns verteilen.
In specifications, Murphy's Law supersedes Ohm's.
tomZ
User
Beiträge: 9
Registriert: Samstag 16. September 2023, 20:16

@grubenfox
Vielen Dank für Deine Hilfe, das war genau das was ich suchte.... und was mir weiterhalf.

Beste Grüße
tom
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Let the foot shooting commence.
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
tomZ
User
Beiträge: 9
Registriert: Samstag 16. September 2023, 20:16

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
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

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})")
tomZ
User
Beiträge: 9
Registriert: Samstag 16. September 2023, 20:16

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})")
Antworten