Si vous déboguez une cellule via pdb, ne la quittez pas avant de réexécuter la cellule, vous ne pourrez pas revenir à votre environnement IPython. Reproduisez-le via Test case for pdb hang in Jupyter notebook . Voici une capture d'écran :
Pour la notice et les moteurs de recherche, pour accrocher votre cahier :
def test():
import pdb; pdb.set_trace() # XXX BREAKPOINT
return 0
test()
Notez que Kernel/Interupt n'aide pas. Vous pouvez enregistrer le bloc-notes, mais pour exécuter à nouveau les cellules, vous devez redémarrer le noyau, auquel cas "Toutes les variables seront perdues"
Cela m'arrive assez souvent si je cherche dans le reste du bloc-notes des conseils sur la façon de déboguer la cellule, puis j'oublie de quitter avant de changer la cellule et de l'exécuter à nouveau. Oui, je peux être plus prudent, mais d'autres ont la même expérience. Merci à @wmayner pour un cas de test pratique décrit à #3400.
J'exécute Jupyter notebook 4.3.1 sur Python 3.4.3 (par défaut, 17 novembre 2016, 01:08:31) [GCC 4.8.4]
Informations sur le noyau : Python 3.4.3 (par défaut, 17 novembre 2016, 01:08:31)
Contribution de
pdb s'exécute dans le même processus et nous savons quand il attend une entrée. Je pense qu'il a besoin de quelqu'un pour faire le travail afin que lorsque la zone de saisie HTML est supprimée dans le frontend, un message soit renvoyé au noyau qui déclenchera EOFError.
Cela peut nécessiter un nouveau type de message, ou nous pourrions le faire en tant que champ de métadonnées sur le message de réponse stdin existant.
Je rencontre le même problème.
Absolument, pareil ici. C'est une douleur royale dans les parties assez sensibles de mon corps. S'il existait un moyen pratique d'arrêter pdb sans la cellule en cours d'exécution, cela pourrait être atténué. Alternativement, au moins un moyen de sauvegarder votre travail avant d'arrêter le notebook serait important (par exemple, un réseau neuronal formé et le notebook se bloque lors de la sauvegarde après 2000 époques).
J'ai également ce problème, avec Jupyter version 4.30, Python 3.6.2. Le redémarrage du noyau semble être le seul moyen de résoudre ce problème.
Je viens de perdre un calcul de 8 heures à cause de cela... il est temps de recommencer.
Je viens de perdre un calcul de 64 heures sur lequel je suis censé présenter les résultats aujourd'hui -.-
Personne n'a trouvé de solution ?
Je viens de me faire mordre par ça aussi. Comment les gens déboguent-ils généralement dans jupyter notebook ? Utiliser pdb, c'est comme jongler avec une grenade :(
S'il vous plaît s'il vous plaît s'il vous plaît corriger cela! Je reçois constamment ce problème.
Pareil ici. Faut refaire un très long calcul
pareil ici.
quelqu'un s'il vous plaît réparer et je vous paierai 5 $
@zsal Si vous êtes sérieux, vous pouvez ajouter ce problème sur https://www.bountysource.com
Même problème ici. Besoin d'un moyen d'interrompre un processus qui s'emballe ou qui "attend" la saisie et de reprendre le contrôle ... même si je ne peux plus accéder à l'invite de saisie.
Je suis un débutant - Comment diable les programmeurs avancés déboguent-ils dans les ordinateurs portables ? Sûrement ils n'utilisent pas PDB avec cette "bombe à retardement" dedans ? S'il vous plaît, partagez vos secrets! :)
+1
+1
+1
+1
En haut!
Ce problème est pénible pour moi depuis des années maintenant chaque fois que j'utilise pdb et que j'oublie de quitter avant de relancer la cellule.
J'ai créé une prime sur BountySource. Peut-être que cela sera enfin corrigé si nous pouvons rassembler suffisamment d'argent.
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help
+1
+1
Cela m'a rendu fou pendant des années.
Que diriez-vous d'utiliser IPython.core.debugger.Pdb
place ?
from IPython.core.debugger import Pdb; Pdb().set_trace()
(Ou la magie %debug
peut être utilisée pour le débogage.)
Exécuter Pdb().set_trace()
deux fois a le même problème.
J'étudie cela. Le fonctionnement de base des interruptions est qu'elles (sous Unix) envoient un signal au processus, qui déclenche alors KeyboardInterrupt.
Il semble y avoir plusieurs problèmes avec ce qui se passe :
pdb
a tout un tas de code attrapant KeyboardInterrupt qui l'empêche de s'infiltrer. Cela peut peut-être être corrigé dans IPython.core.debugger.Pdb
.@minrk a raison et je me suis trompé, désolé.
Pour obtenir ce correctif, les étapes suivantes doivent se produire :
Merci beaucoup d'avoir étudié cela !!
Dès qu'il y a une nouvelle version d'IPykernel, celle-ci peut être fermée comme corrigé.
Terminé! Celui-ci peut être fermé.
import IPython
import ipykernel
print(IPython.__version__)
print(ipykernel.__version__)
IPython.core.debugger.set_trace()
7.15.0
5.3.0
``` 250 sys.stdout.flush()
251
--> 252 def __call__(self, result=None):
253 """Impression avec gestion du cache de l'historique.
254
--KeyboardInterruption--
--KeyboardInterrupt--
```
KeyboardInterrupt semble ne rien faire dans mon cas. Est-ce le comportement attendu ?
Je m'attendrais à ce que cela interrompe. Je vais voir si je peux reproduire. C'est Windows, non ?
macOS 10.15.5
Python 3.6.2 (default, May 4 2018, 19:40:30)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Oh, donc ce n'est pas prévu. Faites-moi savoir s'il y a des informations que je peux ajouter pour clarifier.
liste de pépins
```Version du paquet
Appnope 0.1.0
attr 19.3.0
rappel 0.2.0
eau de javel 3.1.5
décorateur 4.4.2
defusedxml 0.6.0
points d'entrée 0.3
ipykernel 5.3.0
python 7.15.0
ipython-genutils 0.2.0
ipywidgets 7.5.1
jedi 0.17.1
Jinja2 2.11.2
schéma json 3.2.0
jupyter 1.0.0
jupyter-client 6.1.3
jupyter-console 6.1.0
jupyter-core 4.6.3
MarkupSafe 1.1.1
brouillage 0.8.4
nbconvert 5.6.1
nbformat 5.0.7
cahier 6.0.3
emballage 20,4
pandocfiltres 1.4.2
parso 0.7.0
attente 4.8.0
cornichon 0.7.5
pépin 20.0.2
prometheus-client 0.8.0
prompt-toolkit 3.0.5
ptyprocess 0.6.0
Pygmente 2.6.1
pyparsing 2.4.7
pyrsistant 0.16.0
python-dateutil 2.8.1
pyzmq 19.0.1
qtconsole 4.7.5
QtPy 1.9.0
Send2Trash 1.5.0
outils de configuration 46.0.0
six 1.15.0
Terminé 0.8.3
chemin de test 0.4.4
tornade 6.0.4
traitlets 4.3.3
largeur d'eau 0.2.5
codages Web 0.5.1
roue 0.34.2
widgetsnbextension 3.5.1```
Pour moi, le problème a également persisté après la mise à jour. Également sur les nœuds de calcul Linux distants que j'utilise pour le travail, voir :
import IPython
import ipykernel
import os
import platform
print(IPython.__version__)
print(ipykernel.__version__)
print(os.name,platform.system(),platform.release())
IPython.core.debugger.set_trace()
7.15.0
5.3.0
posix Linux 4.19.94-300.el7.x86_64
Vous travaillez actuellement dans un environnement assez volumineux, vous ne pouvez donc pas exclure que certaines dépendances pourraient en être la cause ? Je peux essayer de voir si l'erreur se reproduit également dans un environnement minimal si cela serait utile ?
Cela nécessite un maître d'IPykernel qui n'a pas encore été publié.
Commentaire le plus utile
Je viens de me faire mordre par ça aussi. Comment les gens déboguent-ils généralement dans jupyter notebook ? Utiliser pdb, c'est comme jongler avec une grenade :(