إذا قمت بتصحيح أخطاء خلية عبر pdb ، فلا تتركها قبل إعادة تشغيل الخلية ، فلن تتمكن من العودة إلى بيئة IPython الخاصة بك. أعد إنتاجه عبر حقيبة اختبار تعليق pdb في دفتر Jupyter . هذه لقطة شاشة:
للتسجيل ومحركات البحث ، لتعليق دفتر ملاحظاتك:
def test():
import pdb; pdb.set_trace() # XXX BREAKPOINT
return 0
test()
لاحظ أن Kernel / Interupt لا يساعد. يمكنك حفظ دفتر الملاحظات ، ولكن لتشغيل الخلايا مرة أخرى ، تحتاج إلى إعادة تشغيل النواة ، وعند هذه النقطة "ستفقد جميع المتغيرات"
يحدث هذا لي بشكل غير متكرر إذا كنت أبحث من خلال بقية دفتر الملاحظات للحصول على تلميحات حول كيفية تصحيح أخطاء الخلية ، ثم ننسى الإنهاء قبل تغيير الخلية وتشغيلها مرة أخرى. نعم ، يمكنني أن أكون أكثر حرصًا ، لكن الآخرين لديهم نفس التجربة. بفضل wmayner لحالة الاختبار المريحة الموضحة في # 3400.
أقوم بتشغيل دفتر ملاحظات Jupyter 4.3.1 على Python 3.4.3 (افتراضي ، 17 نوفمبر 2016 ، 01:08:31) [GCC 4.8.4]
معلومات Kernel: Python 3.4.3 (افتراضي ، 17 نوفمبر 2016 ، 01:08:31)
الإدخال من takluyver على # 10499
pdb يعمل في نفس العملية ، ونحن نعرف متى يتوقع المدخلات. أعتقد أنه يحتاج إلى شخص ما للقيام بهذا العمل بحيث عند إزالة مربع إدخال HTML في الواجهة الأمامية ، يتم إرسال رسالة مرة أخرى إلى النواة مما يؤدي إلى رفع EOFError.
قد يحتاج ذلك إلى نوع رسالة جديد ، أو يمكننا القيام بذلك كحقل بيانات وصفية في رسالة رد stdin الحالية.
أنا أواجه نفس المشكلة.
بالتأكيد ، نفس الشيء هنا. هذا ألم ملكي في الأجزاء الحساسة إلى حد ما من جسدي. إذا كانت هناك طريقة مناسبة لإيقاف pdb من دون وجود خلية قيد التشغيل ، فيمكن تخفيف ذلك. بدلاً من ذلك ، ستكون طريقة حفظ عملك على الأقل قبل إيقاف تشغيل الكمبيوتر المحمول مهمة (على سبيل المثال ، الشبكة العصبية المدربة وتعطل الكمبيوتر الدفتري عند حفظه بعد 2000 حقبة).
لدي أيضًا هذه المشكلة ، مع إصدار Jupyter 4.30 و Python 3.6.2. يبدو أن إعادة تشغيل النواة هي الطريقة الوحيدة للتعامل مع هذه المشكلة.
لقد فقدت للتو حسابًا لمدة 8 ساعات بسبب هذا ... حان الوقت للبدء من جديد.
لقد فقدت للتو عملية حسابية لمدة 64 ساعة كان من المفترض أن أقدم النتائج بناءً عليها اليوم -. -
لا أحد وجد حلا؟
لقد تعرضت للعض من هذا أيضًا. كيف الناس عادة التصحيح في دفتر jupyter؟ استخدام PDB يشبه التلاعب بقنبلة: :(
من فضلك من فضلك اصلح هذا! أنا أتلقى هذه المشكلة باستمرار.
كذلك هنا. يجب أن تعيد عملية حسابية طويلة جدًا
كذلك هنا.
شخص ما يرجى إصلاحه وسأدفع لك 5 دولارات
zsal إذا كنت جادًا ، يمكنك إضافة هذه المشكلة على https://www.bountysource.com
نفس المشكلة هنا. أحتاج إلى طريقة لمقاطعة عملية سريعة أو عملية "تنتظر" الإدخال واستعادة التحكم ... حتى لو لم يعد بإمكاني الوصول إلى موجه الإدخال.
أنا مبتدئ - كيف يصحح المبرمجون المتقدمون الأخطاء في أجهزة الكمبيوتر المحمولة؟ من المؤكد أنهم لا يستخدمون PDB مع هذه "القنبلة الموقوتة" فيه؟ من فضلك ، شارك أسرارك! :)
+1
+1
+1
+1
فوق!
كانت هذه المشكلة مؤلمة بالنسبة لي لسنوات حتى الآن في كل مرة أستخدم فيها pdb وأنسى التوقف قبل إعادة تشغيل الخلية.
لقد أنشأت مكافأة على BountySource. ربما سيتم إصلاح هذا أخيرًا إذا تمكنا من جمع ما يكفي من المال.
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help
+1
+1
لقد دفعني هذا إلى الجنون لسنوات.
ماذا عن استخدام IPython.core.debugger.Pdb
بدلاً من ذلك؟
from IPython.core.debugger import Pdb; Pdb().set_trace()
(أو يمكن استخدام السحر %debug
لتصحيح الأخطاء.)
تشغيل Pdb().set_trace()
مرتين له نفس المشكلة.
أنا أحقق في هذا. الطريقة الأساسية لمقاطعات العمل هي أنها (في نظام يونكس) ترسل إشارة إلى العملية ، والتي ترفع بعد ذلك KeyboardInterrupt.
يبدو أن هناك عدة مشكلات مع حدوث ذلك:
pdb
يحتوي على مجموعة كاملة من كود KeyboardInterrupt-catch الذي يمنعه من الترشيح. قد يكون هذا قابلاً للإصلاح في IPython.core.debugger.Pdb
.minrk صحيح وكنت مخطئا ، آسف.
للحصول على هذا الإصلاح ، يجب أن يحدث ما يلي:
شكرا جزيلا للنظر في هذا !!
بمجرد أن يكون هناك إصدار IPykernel جديد ، يمكن إغلاق هذا على أنه ثابت.
منتهي! يمكن إغلاق هذا.
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 __ (ذاتي ، نتيجة = لا شيء):
طباعة 253 "" باستخدام إدارة ذاكرة التخزين المؤقت للتاريخ.
254
- لوحة المفاتيح
- لوحة المفاتيح
""
يبدو أن KeyboardInterrupt لا تفعل شيئًا في حالتي. هل هذا هو السلوك المتوقع؟
أتوقع أن يقطع ذلك. سأرى ما إذا كان بإمكاني التكاثر. هذا هو Windows ، أليس كذلك؟
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
أوه ، لذلك هذا غير متوقع. يُرجى إعلامي إذا كان هناك أي معلومات يمكنني إضافتها للتوضيح.
قائمة النقاط
نسخة الحزمة
أبنوب 0.1.0
Attrs 19.3.0
باك كول 0.2.0
المبيض 3.1.5
ديكور 4.4.2
defusedxml 0.6.0
نقاط الدخول 0.3
ipykernel 5.3.0
ايبثون 7.15.0
إبيثون جينوتيلز 0.2.0
ipywidgets 7.5.1
جيدي 0.17.1
جينجا 2 2.11.2
jsonschema 3.2.0
jupyter 1.0.0
عميل jupyter 6.1.3
jupyter-console 6.1.0
جوبيتر كور 4.6.3
MarkupSafe 1.1.1.1 تحديث
خطأ 0.8.4
nbconvert 5.6.1
nbformat 5.0.7
دفتر 6.0.3
التعبئة والتغليف 20.4
pandocfilters 1.4.2
parso 0.7.0
نتوقع 4.8.0
Pickleshare 0.7.5
نقطة 20.0.2
برنامج Prometheus-client 0.8.0
مجموعة الأدوات السريعة 3.0.5
ptyprocess 0.6.0
Pygments 2.6.1
pyparsing 2.4.7
ثابت 0.16.0
بيثون داتوتيل 2.8.1
pyzmq 19.0.1
qtconsole 4.7.5
QtPy 1.9.0.0 تحديث
Send2Trash 1.5.0.0 تحديث
برنامج setuptools 46.0.0
ستة 1.15.0
Terminado 0.8.3
testpath 0.4.4
تورنادو 6.0.4
السمات 4.3.3
wcwidth 0.2.5
ترميز الويب 0.5.1
عجلة 0.34.2
الحاجيات nbextension 3.5.1 ```
بالنسبة لي استمرت المشكلة أيضًا بعد التحديث. أيضًا في عُقد حساب Linux البعيدة التي أستخدمها للعمل ، انظر:
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
تعمل حاليًا في بيئة ضخمة جدًا ، لذا لا يمكن استبعاد بعض التبعيات التي قد تسببها؟ يمكنني محاولة معرفة ما إذا كان الخطأ يتكرر أيضًا في بيئة صغيرة إذا كان ذلك مفيدًا؟
هذا يحتاج إلى سيد IPykernel الذي لم يتم إصداره بعد.
التعليق الأكثر فائدة
لقد تعرضت للعض من هذا أيضًا. كيف الناس عادة التصحيح في دفتر jupyter؟ استخدام PDB يشبه التلاعب بقنبلة: :(