Hata ayıklama ihtiyaçlarım için pdb
oldukça iyi. Ancak, ipython
'a girebilsem soğutucusu (ve yararlı) olurdu. Bu şey mümkün mü?Koddan ipython'a gitmek mümkün mü?
cevap
standart pdb içine ipython gömen bir ipdb
proje var, yani tıpkı yapabilirsiniz: zamanki pip install ipdb
aracılığıyla
import ipdb; ipdb.set_trace()
Bu yüklenebilir bu.
ipdb
oldukça kısa, bu yüzden yerine siz de Python yolda bir yerlerde bir dosya ipdb.py
oluşturup dosyasına aşağıdaki yapıştırabilirsiniz easy_installing geçerli:
import sys
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi
shell = IPShell(argv=[''])
def set_trace():
ip = ipapi.get()
def_colors = ip.options.colors
Pdb(def_colors).set_trace(sys._getframe().f_back)
Normalde, ipython'u kullandığımda, otomatik hata ayıklamayı "pdb" komutuyla açarım.
Komut dizininin bulunduğu dizindeki "run myscript.py" komutunu kullanarak komutumu çalıştırıyorum.
Bir istisna alırsam, ipython programı hata ayıklayıcının içinde durdurur. IPython docs itibaren komutları ipython büyü (% büyü)
böylece ipython.set_trace gibi bir şey yazma yolu yoktur içine()? :) – Geo
için help komutunu göz atın:
import IPython.ipapi
namespace = dict(
kissa = 15,
koira = 16)
IPython.ipapi.launch_new_instance(namespace)
programlı bir ipython kabuğunu başlatacak. Açıkça namespace
dict değerleri sadece kukla değerlerdir - pratikte locals()
'u kullanmak daha mantıklı olabilir.
Bu belgede kod yazmanız gerektiğini unutmayın; pdb
'un yaptığı gibi çalışmayacak. Eğer istediğin buysa, DoxaLogos'un cevabı muhtemelen senin aradığın gibi.
import pdb; pdb.set_trace()
eşdeğer IPython ile bir şey gibi:
Bu biraz ayrıntılı, ancak ipdb'nin yüklü olup olmadığını bilmek güzel. Renk şemasını ayarlamak için bir kez make_session
çağrısı gereklidir ve kırılması gereken her yere set_trace
çağrıları yerleştirebilirsiniz.
kolay hızlı ve yönlü: Eğer programı hata ayıklama başlatmak istediğiniz yere
from IPython.Debugger import Tracer
debug = Tracer()
Sonra sadece
debug()
yazın.
'ImportError: Python'da 'IPython.Debugger' adında bir modül yok 3.4/IPython 3 – ostrokach
IPython'da 0.11 Eğer Programınız bu
In [5]: cat > tmpf.py
a = 1
from IPython import embed
embed() # drop into an IPython session.
# Any variables you define or modify here
# will not affect program execution
c = 2
^D
Bu çalıştırmak böyle olur gibi görünebilir bu
gibi doğrudan kodunuzda IPython gömebilirsiniz (Ben keyfi varolan ipython oturumu içinde çalıştırmak için seçti. Benim deneyimimde böyle ipython oturumları yerleştirmek çökmesine neden olabilir).
In [6]:
In [6]: run tmpf.py
Python 2.7.2 (default, Aug 25 2011, 00:06:33)
Type "copyright", "credits" or "license" for more information.
IPython 0.11 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: who
a embed
In [2]: a
Out[2]: 1
In [3]:
Do you really want to exit ([y]/n)? y
In [7]: who
a c embed
Bir IPython oturumuna girmeniz çok güzel. Çok teşekkür ederim! – joon
Bunu (neredeyse sonsuz) bir döngü içine aptalca yerleştirdim. Nasıl dışarı çıkarım ki? – gerrit
@gerrit, hala oradaysanız Ctrl + d tuşlarına basın. – confused00
:
__import__('IPython').Debugger.Pdb(color_scheme='Linux').set_trace()
Yeni sürüm kullanabilirsiniz: iseniz
__import__('IPython').core.debugger.Pdb(color_scheme='Linux').set_trace()
IPython'un daha modern bir versiyonunu kullanarak (> 0.10.2),
Ancak, muhtemelen sadece ipdb kullanmanız daha iyi olur.
Modüllerin son zamanlarda biraz karıştırılması gibi görünüyor. Beni
from IPython.core.debugger import Tracer; breakpoint = Tracer()
breakpoint() # <= wherever you want to set the breakpoint
rağmen ne yazık ki, tüm oldukça worthless in qtconsole var için ipython 0.13.1 aşağıdaki işleri üzerinde.
IPython'un daha yeni sürümleri, IPython oturumlarını herhangi bir Python programına yerleştirmek ve yerleştirmek için kolay bir mekanizma sağlar. IPython oturumları gömmek için the following recipe izleyebilir: Bir ipython kabuğuna damla istediğinizde
try:
get_ipython
except NameError:
banner=exit_msg=''
else:
banner = '*** Nested interpreter ***'
exit_msg = '*** Back in main IPython ***'
# First import the embed function
from IPython.frontend.terminal.embed import InteractiveShellEmbed
# Now create the IPython shell instance. Put ipshell() anywhere in your code
# where you want it to open.
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg)
Sonra ipshell()
kullanın. Bu, kodunuzdaki IPython yorumlayıcılarını gömmenize (ve hatta yerleştirmenize) olanak tanır.
Birkaç güne kaç kez cevap eklediğimi google'a bir çift gondirdim ... bazen bir betiği normal bir şekilde çalıştırabildiğim için ve sadece ipdb.set_trace()
kesme noktasını koymak zorunda kalmadan hatalar üzerine ipython/ipdb içine düşebiliyorum kod
ipython --pdb -c "%run path/to/my/script.py --with-args here"
(kursun ilk pip install ipython
ve pip install ipdb
)
Teşekkürler! Biraz daha basit: 'ipython --pdb - ./path/to/my/script --with-args here' – alisianoi
- 1. Telegram'dan Bot konumuna gitmek mümkün müdür?
- 2. Gitmek
- 3. mümkün mü?
- 4. mümkün mü?
- 5. mümkün mü?
- 6. ? mümkün mü?
- 7. WPF: Koddan denetimleri ekle
- 8. ICS'de "Arka plan verilerini kısıtla" ayarını koddan (program aracılığıyla) ayarlamak mümkün mü?
- 9. simülatörde Retina Ekranını test etmek mümkün mü?
- 10. fopen - bu mümkün mü?
- 11. HHVM'yi geçmek mümkün mü?
- 12. Com nesnesi, mümkün mü?
- 13. skip_while` klonlamak mümkün mü?
- 14. DialogFragment'i canlandırmak mümkün mü?
- 15. PHP dosyası. Mümkün mü?
- 16. getImageResource() Android. Mümkün mü?
- 17. SnackBar. Mümkün mü?
- 18. Android. ActiveJDBC mümkün mü?
- 19. Eta azaltma mümkün mü?
- 20. Özyineli DataTemplates mümkün mü?
- 21. Şişeyle İçermek mümkün mü?
- 22. thinktecture identitymanager, mümkün mü?
- 23. IdentityServer3 tümleştirmesi. Mümkün mü?
- 24. Amaçları programlamak mümkün mü?
- 25. JSON - Java DTO'yu serileştirmek/serileştirmek mümkün mü?
- 26. Eclipse kullanarak .NET geliştirmesi yapmak mümkün mü?
- 27. xslt bu birkaç geçiş gitmek zorunda kalmadan mümkün olup olmadığını
- 28. Android: Yerel koddan nasıl yayın yapılır?
- 29. Çıktı Penceresinde kaynağa gitmek için çift tıklatın
- 30. Dil uzantılarını gizlemek mümkün mü?
Harika! Bu çok havalı! – Geo
Django ile inanılmaz iyi çalışıyor. Peki, yazdığım yazıyı göremediğimden başka bir şey de olmasa da, muhtemelen kolay bir şekilde çözülebilir (ipdb'nin sadece altı satırından beri). –
Aslında, sorun şu ki, Django, runserver için ayrı bir iş parçacığı istediğini ve herhangi bir kod düzenleme yaptığınızda, bu iş parçacığını yeniden gönderir. Bu normal olarak iyi çalışır, ancak iş parçacığı öldüğünde pdb içinde oturuyorsanız, terminal çıldırır. Bunu runserver, runniny 'stty sane' den ayırarak, daha sonra runserver'ı yeniden başlatarak düzeltebilirsiniz. –