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 :
mais rien qui donne le "chemin" d'appels complet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 inspect.stack() inspect.currentframe() sys._getframe()
En Perl il y a caller() qui fait bien le job.
Voici un petit exemple, avec le résultat attendu:
module f1.py
module f2.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()
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
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
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.
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
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
Partager