4 Le module scrute propose la fonction SCRUTE qui affiche sur
5 la stderr, la valeur de l'objet (passé en argument)
6 précédée le nom de l'objet.
7 Il propose également la fonction EXAMINE qui détaille sur
8 la stderr le contenu d'un objet
10 N.B. : les fonctions SCRUTE e EXAMINE ne sont opérantes que pour les développeurs
11 (la variable DEVELOPPEUR doit être définie)
15 from developpeur import DEVELOPPEUR
19 def NULL( *l_args, **d_args ) : pass
24 developpeur.sortie.write( "import de "+__name__+" : $Id$" )
25 developpeur.sortie.write( "\n" )
31 def SCRUTE( valeur ) :
36 La fonction SCRUTE affiche sur la stderr, la valeur (passée en argument)
37 d'une variable précédée de son nom.
38 L'affichage précise également le nom du fichier et le numéro
39 de la ligne où la fonction SCRUTE a été appelée.
41 N.B. : le type de la variable doit posséder de préférence une méthode __str__
44 from scrute import SCRUTE
50 SCRUTE(r) ; SCRUTE(f(r)) # ==> ERREUR
54 filename,lineno=ici.ICI()
56 line = linecache.getline( filename, lineno )
58 ll=re.sub( "\s*#.*$" , '' ,line)
61 l_occurrences=re.findall( "SCRUTE" , ll )
62 assert(len(l_occurrences)>0),__name__+" : pas de SCRUTE trouvé !"
63 assert(len(l_occurrences)<=1),\
64 __name__+" : "+str(len(l_occurrences))+" SCRUTE sur la même ligne ; c'est LIMITE à 1 !"
66 ll=re.sub( "\s*;.*$" , '' ,line)
67 regex='^.*SCRUTE[^(]*\('
68 l=re.sub( regex , '' ,ll)
70 nom_objet=re.sub( regex , '' ,l)
73 developpeur.sortie.write( nom_objet+'=' )
75 developpeur.sortie.write( s )
76 developpeur.sortie.write( " ("+str(type(valeur))+")" )
78 developpeur.sortie.write( '\n' )
79 developpeur.sortie.flush()
83 def makeClassName( ob ) :
85 if type(ob) == types.InstanceType :
86 return str(ob.__class__)
93 Affiche sur la developpeur.sortie le contenu d'un objet
99 Utilites.EXAMINE(object)
103 f = sys._getframe( appel_EXAMINE )
106 filename,lineno=ici.ICI()
107 line = linecache.getline( filename, lineno )
108 nom=re.sub( "^.*EXAMINE *\(", "" , line )
109 nom=re.sub( " *[,\)].*$", "" , nom )
110 nom=re.sub( "\n", "" , nom )
111 developpeur.sortie.write( "Examen de "+nom+" de type "+makeClassName(ob)+"\n" )
115 developpeur.sortie.write( '\t'+st+' = ' )
116 developpeur.sortie.flush()
117 commande="import developpeur;developpeur.sortie.write( str("+st+")+'\\n' )"
119 exec commande in context
121 commande="import sys; sys.stderr.write( str("+st+")+'\\n' )"
122 exec commande in context