2017-10-16 4 views
1

La commande display de pdb semble afficher uniquement une expression lorsque la variable entière est affectée.python3 pdb afficher la liste

pass 
foo = [1, 2, 3] 
foo[0] = 8 
foo.append(7) 
pass 

La sortie que je reçois lorsque vous exécutez le code ci-dessus avec python3 -m pdb bar.py, puis en entrant display foo est:

> bar.py(2)<module>() 
-> foo = [1, 2, 3] 
(Pdb) display foo 
display foo: ** raised NameError: name 'foo' is not defined ** 
(Pdb) n 
> bar.py(3)<module>() 
-> foo[0] = 8 
display foo: [1, 2, 3] [old: ** raised NameError: name 'foo' is not defined **] 
(Pdb) 
> bar.py(4)<module>() 
-> foo.append(7) 
(Pdb) 
> bar.py(5)<module>() 
-> pass 
(Pdb) foo 
[8, 2, 3, 7] 
(Pdb) 

Le NameError et la première sortie de l'affichage sont attendus. Cependant, il semble que l'affichage ne saisit pas que foo a changé lorsque son premier élément a été modifié ou lorsque nous avons ajouté 7.

Existe-t-il un moyen de dire à pdb de lister ces changements? Il semble que display str(foo) fait le travail mais je me demande s'il y a une meilleure solution.

Répondre

0

Oui, le moyen de suivre ces modifications est plutôt la commande 'p'. Voir cet exemple

> /home/maksim/Projects/Python/basic/test.py(2)<module>() 
-> foo = [1, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(3)<module>() 
-> foo[0] = 8 
    1  pass 
    2  foo = [1, 2, 3] 
    3 -> foo[0] = 8 
    4  foo.append(7) 
    5  pass 
    6  
    7  
    8  
[EOF] 
[1, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(4)<module>() 
-> foo.append(7) 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4 -> foo.append(7) 
    5  pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3] 
(Pdb) s;;l;;p foo 
> /home/maksim/Projects/Python/basic/test.py(5)<module>() 
-> pass 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4  foo.append(7) 
    5 -> pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3, 7] 
(Pdb) s;;l;;p foo 
--Return-- 
> /home/maksim/Projects/Python/basic/test.py(5)<module>()->None 
-> pass 
    1  pass 
    2  foo = [1, 2, 3] 
    3  foo[0] = 8 
    4  foo.append(7) 
    5 -> pass 
    6  
    7  
    8  
[EOF] 
[8, 2, 3, 7] 
(Pdb) 
+0

Merci pour votre commentaire, mais il ne répond pas entièrement à ma question. Impression imprimerait le contenu de foo même si elle n'a pas changé ce que j'aurais aimé éviter. – jbl

+0

Oh, je vois ... oui, vous avez raison, non. Je posterai un commentaire si quelque chose de mieux va apparaître. Et désolé de répondre au lieu de commenter - ma réputation n'est que de 18 points pour l'instant, je ne peux donc pas commenter les questions des utilisateurs, mais seulement les miennes. Merci pour votre réponse. –