Bonjour,

Je débute en python (3.7) et je cherche une moyen qui pourrait me ramener la liste des fonctions imbriquées.
Ca m'est nécessaire pour le debuging et connaître le contexte d'appel de chaque fonction.

J'ai bien trouvé quelques approches de solutions, avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
inspect.stack()
inspect.currentframe()
sys._getframe()
mais rien qui donne le "chemin" d'appels complet

En Perl il y a caller() qui fait bien le job.

Voici un petit exemple, avec le résultat attendu:
module f1.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
form f2 import f2
 
def _internalF1():
   currentCall = # Un truc ici pour récupérer le chemin complet des appels
   print(f"Caller path: {currentCall}")
   f2()
   return True 
 
def f1():
   currentCall = # Un truc ici pour récupérer le chemin complet des appels
   print(f"Caller path: {currentCall}")
   _internalF1()
   return True
 
f1()
module f2.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
def _internalF2():
   currentCall = # Un truc ici pour récupérer le chemin complet des appels
   print(f"Caller path: {currentCall}")
   return True 
 
def f2():
   currentCall = # Un truc ici pour récupérer le chemin complet des appels
   print(f"Caller path: {currentCall}")
   _internalF2()
   return True
Et du coup je verrai bien un résultat dans cet esprit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Caller path: f1
Caller path: f1/_internalF1
Caller path: f1/_internalF1/f2
Caller path: f1/_internalF1/f2/_internalF2
Dans la big picture, il est à noter que, le chargement des modules est totalement dynamique et que je ne sais jamais dans quel ordre les fonctions seront appelées et par quelle autre.
D'ou le fait d'avoir un nom de fonction (externe), égal à son nom de module et que les sous fonctions internes, commence toujours par un "_".
Tout ceci me facilitant la maintenance.

Merci d'avance de votre aide