Dank Jon Clements Antwort ich in der Lage war, eine Funktion zu machen, die eine geordnete Liste aller Anrufer zurückgibt:
def f1():
names = []
frame = inspect.currentframe()
## Keep moving to next outer frame
while True:
try:
frame = frame.f_back
name = frame.f_code.co_name
names.append(name)
except:
break
return names
und wenn in einer Kette genannt:
def f2():
return f1()
def f3():
return f2()
def f4():
return f3()
print f4()
sieht wie folgt aus:
['f2', 'f3', 'f4', '<module>']
In meinem Fall habe ich überhaupt etwas '<module>'
herauszufiltern und nach, und dann das letzte Element nehmen den Namen des Ursprungs Anrufer sein.
oder die ursprüngliche Schleife ändert beim ersten Auftreten von einem beliebigen Namen mit '<'
beginnen zu retten:
frame = frame.f_back
name = frame.f_code.co_name
if name[0] == '<':
break
names.append(name)
Aus der Dokumentation: 'Es ist nicht in allen Implementierungen von Python.' garantiert existiert – pradyunsg