web-dev-qa-db-fra.com

Comment manipuler une variable dont le nom est en conflit avec les commandes PDB?

Mon code est, pour le meilleur ou pour le pire, rempli de variables à une seule lettre (c'est de la physique, donc ces lettres ont un sens), ainsi que de NumPy, avec lequel j'interagis souvent.

Lorsque vous utilisez le débogueur Python, je vais parfois vouloir regarder la valeur de, par exemple, n. Cependant, lorsque j'appuie sur n<enter>, c'est la commande PDB pour (n)ext, qui a une priorité plus élevée. print n fonctionne en le regardant, mais comment le définir?

83
Nick T

Utilisez un point d'exclamation ! avant une instruction pour l'exécuter:

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

Les docs disent:

! statement

Exécutez l'instruction (une ligne) dans le contexte du cadre de pile actuel. Le point d'exclamation peut être omis sauf si le premier mot de l'instruction ressemble à une commande de débogage. [...]

106
Abraham

Vous pouvez utiliser des points-virgules, alors mettez simplement autre chose devant:

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4
13
Corley Brigman

Ce n'est pas la réponse directe à votre question, mais cela peut vous aider: PuDB est une interface visuelle basée sur console pour PDB qui sépare les commandes de la manipulation des variables par conception.

2