Pour examiner la façon dont fonctionne le module urllib, j'ai truffé son code d'instructions
print 'passage 1'
print 'passage 2'
print 'passage 3'
print 'passage 4'
print 'passage 5'
print 'passage 6' etc
J'ai ainsi observé qu'avant d'exécuter quelque instruction que ce soit, la progression dans urllib passe par toutes les instructions détectrices print 'passage x' situées en non indentation.
La dernière instruction qui soit exécutée est print 'passage 19', qui est située avant les 3 dernières de mon urllib modifié:
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 print 'passage 18' def main(): import getopt, sys try: opts, args = getopt.getopt(sys.argv[1:], "th") except getopt.error, msg: print msg print "Use -h for help" return t = 0 for o, a in opts: if o == '-t': t = t + 1 if o == '-h': print "Usage: python urllib.py [-t] [url ...]" print "-t runs self-test;", print "otherwise, contents of urls are printed" return if t: if t > 1: test1() test(args) else: if not args: print "Use -h for help" for url in args: print urlopen(url).read(), print '_name_ = ',__name__ print 'passage 19' # Run test program when run as a script if __name__ == '__main__': print 'passage 20' main()
Puis il y a exécution de l'instruction print "J'entre dans urlopen"
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
16
17
18
19
20
21
22
23 print 'passage 3' _urlopener = None print type(_urlopener)#eee def urlopen(url, data=None, proxies=None): print "J'entre dans urlopen" """urlopen(url [, data]) -> open file-like object""" global _urlopener if proxies is not None: opener = FancyURLopener(proxies=proxies) elif not _urlopener: # si _urlopener = None alors not _urlopener vaut True print 'ICI je passe dans elif not _urlopener'#eee opener = FancyURLopener() _urlopener = opener print type(opener) print type(_urlopener)#eee else: opener = _urlopener if data is None: print 'LA je passe par if data is none' return opener.open(url) else: return opener.open(url, data) print 'passage 4'
Je ne comprends pas comment le déroulement du programme peut appeler la fonction urlopen() après être passé par l'instruction print 'passage 19',
puisqu'aprés il n'y a que 3 lignes avec une condition qui n'est même pas vérifiée ( print '_name_ = ',__name__ indique que __name__ vaut 'urllib').
Partager