Je lance donc un script Python dans lequel j'appelle le débogueur de Python, PDB en écrivant:
import ipdb; ipdb.set_trace()
(La version iPython de PDB, bien que pour le sujet je ne pense pas que cela fasse une différence; je l'utilise uniquement pour la sortie colorée).
Maintenant, quand j'arrive au débogueur, je veux exécuter une instruction multiligne telle qu'une clause if ou une boucle for mais dès que je tape
if condition:
et appuyez sur la touche retour, j'obtiens le message d'erreur *** SyntaxError: invalid syntax (<stdin>, line 1)
Comment peut-on exécuter des instructions multilignes dans PDB? Si ce n'est pas possible, existe-t-il un moyen de contourner ce problème pour continuer à exécuter une clause if ou une boucle for?
interact
commande pdb ( comme je l'ai appris de ce message de suivi de bogues ).!
laimport
déclaration est-elle nécessaire ?!
, pour éviter les accidents. Par exemple,c = 42
dans pdb continuerait l' exécution au lieu de l'assigner à une variablec
.interact
, mais cela ne fonctionne pas bien avec Spyder pour moi.En python3
ipdb
(etpdb
) ont une commande appelée interact . Il peut être utilisé pour:Pour l'utiliser, entrez simplement
interact
à l'invite pdb. Entre autres choses, il est utile pour appliquer du code s'étendant sur plusieurs lignes, et aussi pour éviter le déclenchement accidentel d'autres commandes pdb.la source
interact
est une suggestion trop forte. 90%, c'est tout ce dont j'ai besoin, et c'est beaucoup plus facile à taper quefrom IPython import embed; embed()
Ma recommandation est d'utiliser l'intégration IPython.
la source
import embed; embed(user_ns=locals())
.Dans l'interpréteur ou le débogueur Python (2.7.1) (import pdb), vous pouvez exécuter une instruction multiligne avec la syntaxe suivante.
Remarque: lorsque je suis dans l'interpréteur, je dois appuyer deux fois sur retour avant que le code ne s'exécute. Dans le débogueur, cependant, je n'ai qu'à appuyer une fois sur retour.
la source
Il existe un cas particulier si vous souhaitez que quelques commandes soient exécutées lorsque vous atteignez un point d'arrêt. Ensuite, il y a la commande du débogueur
commands
. Il vous permet de saisir plusieurs lignes de commandes puis de terminer toute la séquence avec leend
mot clé. Plus avec(pdb) help commands
.la source
Je ne sais pas si vous pouvez le faire, ce serait une fonctionnalité intéressante pour ipdb. Vous pouvez bien sûr utiliser les compréhensions de liste et exécuter des expressions multilignes simples comme:
Vous pouvez également écrire certaines fonctions à l'avance pour faire tout ce dont vous avez besoin et qui prend normalement plusieurs lignes.
la source