Salome HOME
AY a ajouté l'interception de l'exception levée lorsque la chaine passée
[tools/eficas.git] / Utilites / ici.py
1 """
2 Module ici
3 ----------
4     le module ici propose la fonction ICI pour afficher
5     le fichier courant et le numéro de la ligne courante.
6 """
7
8 try :
9         from developpeur import DEVELOPPEUR
10 except :
11         DEVELOPPEUR=None
12
13 def NULL( *l_args, **d_args  ) : pass
14
15 if DEVELOPPEUR :
16
17     import developpeur
18     developpeur.sortie.write( "import de "+__name__+" : $Id$" )
19     developpeur.sortie.write( "\n" )
20
21     import sys
22
23     def ICI(offset=1) :
24     
25         """
26         Fonction ICI
27         ------------
28         La fonction ICI affiche sur la stderr, le nom du fichier qui l'appelle,
29         le numéro de la ligne ou elle est appelée et retourne ces deux informations.
30     
31         Usage :
32             from ici import ICI
33             ICI()
34             filename,lineno=ICI()
35
36         N.B. : la fonction ICI n'est opérante que pour les développeurs
37         """
38     
39         sys.stdout.flush()
40         sys.stderr.flush()
41         try :
42             1/0
43         except :
44             ###f=sys.exc_info()[2].tb_frame.f_back
45             ###lineno=f.f_lineno
46             ###code=f.f_code
47             ###filename=code.co_filename
48     
49             import traceback
50             trace=traceback.extract_stack()
51     
52             indice = len(trace)-(2+offset)
53             if indice<0 : indice=0
54     
55     
56             assert( indice<len(trace) ),"valeur de offset INVALIDE : "+str(offset)+" taille de la table "+len(trace)
57             file_name, lineno, func_name, dummytxt = trace[ indice ]
58     
59             assert( (indice>0) or (func_name=="?") )
60             if func_name=="?" : func_name = "main"
61     
62         if offset >= 0 :
63                 import funcname
64                 developpeur.sortie.write( file_name+':'+str(lineno)+': ('+str(funcname.FUNCNAME(func_name,file_name,lineno))+') : ' )
65                 developpeur.sortie.flush()
66     
67         return file_name,lineno
68
69
70 else :
71         ICI = NULL