à l'aide de ipdb pour déboguer du code python dans une cellule (jupyter ou Ipython)
Je suis en utilisant jupyter (ou Ipython) ordinateur portable avec firefox, et souhaitez déboguer du code python dans la cellule. Je suis " importer ipdb; ipdb.set_trace()' comme une sorte de point d'arrêt, par exemple, mon portable a le code suivant:
a=4
import ipdb; ipdb.set_trace()
b=5
print a
print b
qui, après l'exécution avec Maj+Entrée me donne cette erreur:
--------------------------------------------------------------------------
MultipleInstanceError Traceback (most recent call last)
<ipython-input-1-f2b356251c56> in <module>()
1 a=4
----> 2 import ipdb; ipdb.set_trace()
3 b=5
4 print a
5 print b
/home/nnn/anaconda/lib/python2.7/site-packages/ipdb/__init__.py in <module>()
14 # You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
15
---> 16 from ipdb.__main__ import set_trace, post_mortem, pm, run, runcall, runeval, launch_ipdb_on_exception
17
18 pm # please pyflakes
/home/nnn/anaconda/lib/python2.7/site-packages/ipdb/__main__.py in <module>()
71 # the instance method will create a new one without loading the config.
72 # i.e: if we are in an embed instance we do not want to load the config.
---> 73 ipapp = TerminalIPythonApp.instance()
74 shell = get_ipython()
75 def_colors = shell.colors
/home/nnn/anaconda/lib/python2.7/site-packages/traitlets/config/configurable.pyc in instance(cls, *args, **kwargs)
413 raise MultipleInstanceError(
414 'Multiple incompatible subclass instances of '
--> 415 '%s are being created.' % cls.__name__
416 )
417
MultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Le même message d'erreur apparaît si j'utilise ce code dans les jupyter ordinateur portable dans le navigateur, mais dans jupyter qtconsole.
Ce que fait cette erreur de dire et quoi faire pour l'éviter?
Est-il possible de déboguer le code dans la cellule, étape par étape, en utilisant ensuite, continuez, etc commandes de l'apb débogueur?
Vous devez vous connecter pour publier un commentaire.
Eu ce problème aussi et il semble être lié à des versions de jupyter et ipdb.
Solution est d'utiliser ce lieu de la ipdb bibliothèque
set_trace
appel:Source: http://devmartin.com/blog/2014/10/trigger-ipdb-within-ipython-notebook/
Annoté capture d'écran:
exit
etctrl-d
ne semble pas fonctionner.exit
etquit
fait pour moidevmartin
blog cité ici les références une autre SORTE de postq
pour quitter le débogueur, et l'utilisationh
pour voir une liste de commandes de débogage.Tracer()
est obsolète. Utilisationfrom IPython.core.debugger import set_trace
puis placeset_trace()
où le point d'arrêt est nécessaire.Si vous utilisez Jupyter Portable
commencez votre cellule avec la magie de commande "%%debug".
Puis un ipdb ligne sera affichée au bas de la cellule qui va vous aider à naviguer à travers la session de débogage. Commandes suivantes devraient vous aider à démarrer:
n- exécution de la ligne en cours et passer à la prochaine ligne.
c- continuer l'exécution jusqu'au prochain point d'arrêt.
Assurez-vous de redémarrer le noyau à chaque fois que vous décidez sur le débogage, de sorte que toutes les variables sont fraîchement affecté.Vous pouvez vérifier la valeur de chaque variable par le ipdb ligne et vous allez voir que la variable n'est pas définie jusqu'à ce que vous exécutez la ligne qui attribue une valeur à cette variable.
import set_trace as bp
, c'est drôle,set_trace()
ne se sentent comme l'équivalent de fixer un point d'arrêt 🙂Ma version de Jupyter est 5.0.0 et mon correspondant ipython version 6.1.0. Je suis à l'aide de
Tracer
est répertorié comme obsolète.Mise à jour:
J'ai essayé d'utiliser la méthode à partir d'une autre réponse https://stackoverflow.com/a/43086430/8019692 ci-dessous, mais vous avez une erreur:
MultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Je préfère ma méthode pour le %%debug de la magie depuis que je peux définir des points d'arrêt dans les fonctions définies dans d'autres cellules et de l'exécution de la fonction dans une autre cellule. Jupyter/IPython gouttes dans le débogueur dans ma fonction où le point d'arrêt est défini, et je peux utiliser l'habituel
pdb
commandes. À chacun son propre...@lugger1, l'on a accepté la réponse est obsolète.
from IPython.core.debugger import Pdb; Pdb().set_trace()
Tracer()
est obsolète.Utilisation:
from IPython.core.debugger import set_trace
puis place
set_trace()
où le point d'arrêt est nécessaire.Cela fonctionne bien et nous apporte un peu plus de confort (par exemple, la coloration syntaxique) que de simplement en utilisant le haut-apb.
source