IPython için en iyi 5 hata ayıklama yöntemini açığa çıkarmak

İyi bir entegre geliştirme ortamı (IDE) ile gelen hata ayıklayıcı, geliştiricilerin sahip olabileceği en güçlü araçlardan biridir, ancak herkes harika bir kod hata ayıklayıcısına sahip entegre bir geliştirme ortamı (IDE) kullanmaz . Bir programcı olarak, Python kodunda hata ayıklarken kullanılacak en iyi hata ayıklayıcının hangisi olduğunu düşünüyorsunuz? Değilse, IPython'u hata ayıklayıcı olarak kullanmayı deneyin.

Yazar | switowski

Çevirmen | Su Benru, sorumlu editör | Tu Min

Aşağıdaki çeviridir:

Tenderlove (Ruby ve Rails'in çekirdek geliştiricilerinden biri) "Ben bir koyma hata ayıklayıcısıyım" adlı harika bir makale yazdı (https: // .com /2016/02/05/i-am-a-puts-debuggerer.html), hala Ruby oynarken bu makaleyi beğendim. Bu makalenin amacı herkese şunu söylemektir: Çoğu durumda, olgun bir hata ayıklayıcıya ihtiyacınız yoktur. Beni yanlış anlamayın (veya Tenderlove), iyi bir entegre geliştirme ortamı (IDE) ile gelen hata ayıklayıcının bir geliştiricinin sahip olabileceği en güçlü araçlardan biri olduğunu düşünüyorum! Koda kolayca kesme noktaları yerleştirmenize, yığın izlemede hareket etmenize veya değişkenleri dinamik olarak incelemenize ve değiştirmenize olanak tanır. Ayrıca, geliştiricilerin büyük kod tabanlarında çalışmasını kolaylaştırır ve acemi programcıların yeni projelerin ilerlemesini hızlandırmasına yardımcı olabilir.

Ancak, insanlar bugün hala kodlarında hata ayıklamak için print ifadesini kullanıyor. Bunu her zaman yaparım çünkü bir değişkeni yazdırmak hızlı ve kolaydır. "Bir hata ayıklama oturumu başlatmak istiyorum" cümlesi kulağa ağır geliyor ve "Bu değişkende bir sorun olduğunu düşünüyorum. Çıktısını almak istiyorum!" Çok daha kolay. İşte 5 dakika içinde yazabileceğimiz bir baskı ifadesi örneği:

baskı (a_varible) ... eğer foo: Yazdır(" > > > > > > > > > > > > > > 3. IF "içinde) ... Yazdır(" > > > > > > > > > > > > > > 37. IF "içinde) Yazdır(" > > > > > > > > > > # @!? # !!! ")

Yukarıdaki kod tanıdık geliyor mu? Print deyimini kullanarak kod hata ayıklamasında sorun yoktur. Çoğu zaman tek yapmanız gereken hatayı bulmaktır. Bazen kodda hata ayıklamanın tek yolu budur. Çünkü kullanıcının kullanımını etkilemeden üretim ortamı koduna hata ayıklama kodu eklemek zordur. Ancak, yalnızca bazı yazdırma ifadeleri eklemek ve ardından günlüğü görüntülemek herhangi bir soruna neden olmamalıdır.

Herkes harika bir kod hata ayıklayıcısına sahip entegre bir geliştirme ortamı (IDE) kullanmıyor. 2019 Stack Overflow Geliştirici Anketi raporu şunu gösteriyor: Geliştiricilerin% 30,5'i Notepad ++ kullanıyor, geliştiricilerin% 25,4'ü Vim kullanıyor ve geliştiricilerin% 23,4'ü Sublime Text kullanıyor. Bunlar metin editörleridir! Geliştiricilerin Vim'i PyCharm veya VS Code kullanan çoğu kullanıcıdan daha verimli kullandıklarını görmeme rağmen, bir metin düzenleyicinin güçlü bir kod hata ayıklayıcısıyla birlikte gelmediğini unutmayın. Python kodunda hata ayıklamak için elbette standart Python hata ayıklayıcı pdb'yi kullanabilirsiniz, ancak şimdi daha iyi bir seçeneğiniz var: bu, hata ayıklayıcı olarak IPython'u kullanmaktır.

VS Code'u neredeyse iki yıldır kullanıyorum, ancak onun yerleşik hata ayıklayıcısını en son ne zaman kullandığımı hatırlamıyorum. Hata ayıklama çalışmalarımın çoğu IPython'da yapılıyor. Aşağıdaki hata ayıklama yöntemim:

IPython oturumunu koda gömün

Benim için en yaygın uygulama, koda bir IPython oturumu yerleştirmektir. Sadece koda ihtiyacın var eklemek Aşağıdaki iki satır yapılabilir:

IPython içe aktarma katıştırmasından Göm

Bu iki kod satırını şu şekilde aynı satıra koymayı seviyorum:

IPython'dan içe aktarma embed; embed

Bu durumda, klavyeyi kaldırmak için yalnızca bir kez dokunmam gerekiyor. Dahası, Python'da, aynı satıra birden fazla ifade koymak kötü bir alışkanlıktır, bu nedenle tüm kod linterleri bu satırı bir sorun olarak işaretler, böylece hata ayıklama tamamlandığında, hata ayıklama onu koymayı unutmaz. Kaldırmak.

Kodu çalıştırdığınızda ve yorumlayıcı embed işlevinin bulunduğu satıra ulaştığında, bir IPython oturumu açacaktır. Kodda neler olduğuna daha yakından bakabilirsiniz. İşiniz bittiğinde, oturumu kapatmak için Ctrl + d'yi kullanmanız yeterlidir ve kod çalışmaya devam edecektir. Bu yöntemin bir avantajı, IPython oturumunu kapattığınızda, IPython'da yaptığınız tüm değişikliklerin kaydedilmesidir. Bu nedenle, değişkenleri veya işlevleri bu şekilde değiştirebilir (hatta işlevi bazı basit günlüklerle dekore edebilirsiniz) ve kodun geri kalanının davranışını görüntüleyebilirsiniz.

Aşağıda, yerleştirmeyi kullanmanın kısa bir gösterimi bulunmaktadır. Aşağıdaki koda sahip olduğumuzu varsayalım:

a = 10 b = 15 IPython'dan içe aktarma embed; embed baskı (f "a + b = {a + b}")

İşte çalıştırdığımızda ne oluyor:

Yukarıda görebileceğiniz gibi, bir değişkenin değerini değiştirdim ve IPython oturumunu kapattığımda, a'nın yeni değeri korundu.

Koda kesme noktaları yerleştirin

Belirli bir kod satırında neler olduğunu görmek istiyorsanız, koda bir IPython oturumu yerleştirmek iyi bir fikirdir. Ancak bir sonraki kod satırını gerçek bir hata ayıklayıcı gibi çalıştırmanıza izin vermez. Bu yüzden daha iyi bir yol, koda bir kesme noktası koymaktır. Python 3.7 sürümünden başlayarak, kesme noktaları yerleştirmek için kullanılabilen kesme noktası adı verilen yeni bir yerleşik işlev vardır. Python'un daha düşük bir sürümünü kullanıyorsanız, aşağıdaki kodu çalıştırarak aynı etkiyi elde edebilirsiniz:

ithal pdb; pdb.set_trace

Python'un varsayılan hata ayıklayıcısı (pdb) oldukça ilkeldir. Tıpkı standart Python REPL (etkileşimli bir yorumlayıcı ortamı. R-okuma), E-değerlendirme), P-baskı), L-döngüsü) gibi, sözdizimi vurgulama veya otomatik girinti içermez. Daha iyi bir seçim ipdb'dir. IPython'u hata ayıklayıcı olarak kullanacaktır. Etkinleştirmek için, yukarıdaki koddaki pdb'yi ipdb ile değiştirmeniz gerekir:

ipdb'yi içe aktar; ipdb.set_trace

Başka bir ilginç hata ayıklayıcı PDB ++ var. İpdb'den farklı bir dizi özelliğe sahiptir, örneğin, kodun mevcut konumunu sürekli olarak görüntüleyen bir yapışkan mod.

Hangi hata ayıklayıcıyı kullanırsanız kullanın, hepsinin oldukça standart bir komut seti vardır. Sonraki komutu (veya sadece n komutunu) çağırarak sonraki satırı çalıştırabilir, adım (veya s) komutunu çağırarak işleve girebilir, bir sonraki kesme noktasına kadar yürütmeye devam etmek için devam (veya c) komutunu kullanabilir ve görüntülemek için l veya ll komutunu kullanabilirsiniz. Mevcut kod çalıştırma konumu vb. Bir CLI (Komut Satırı Arayüzü) tipi hata ayıklayıcıda yeniyseniz, "Pdb Kullanarak Python Kodunda Hata Ayıklama Eğitimi" bu konuda uzmanlaşmanıza yardımcı olacaktır.

% run -d dosyaadı.py

IPython'da bir hata ayıklayıcı başlatmanın başka bir yolu vardır. Daha önce olduğu gibi herhangi bir dosyanın kaynak kodunu değiştirmenize gerek yoktur. Sadece% run -d filename.py sihirli komutunu çalıştırmanız gerekir, ardından IPython filename.py dosyasını çalıştıracak ve ilk satırında bir kesme noktası belirleyecektir. Etki, import ipdb; ipdb.set_trace'i filename.py dosyasına manuel olarak koymak ve onu çalıştırmak için python filename.py komutunu kullanmakla eşdeğerdir.

Kesme noktasını ilk satırdan farklı bir konuma yerleştirmek istiyorsanız, -b parametresini kullanabilirsiniz. Aşağıdaki kod, kesme noktasını 42. satıra yerleştirir:

% run -d -b42 dosyaadı.py

Unutmayın, burada belirtilen satır, gerçekten bazı işlemleri gerçekleştiren kodu içermelidir. Boş satırlar veya yorum satırları olamaz!

Son olarak, bir dosyaya çalıştıracağınız şey olmayan bir kesme noktası koymak istediğiniz bir durum olabilir. Örneğin, içe aktarılan bir modülde bir hata gizlenmiş olabilir ve oraya ulaşmak için sonraki komutu 100 kez yazmak istemezsiniz. -B parametresi, kesme noktasının yerleştirileceği tam konumu belirtmek için bir dosya adını, ardından iki nokta üst üste ve satır numarasını kabul edebilir. Değiştirilen kod aşağıdaki gibidir:

% run -d -b myotherfile.py:42 myscript.py

Yukarıdaki kod, myotherfile.py adlı dosyanın 42. satırında bir kesme noktası belirleyecek ve ardından myotherfile.py dosyasını çalıştırmaya başlayacaktır. Python yorumlayıcısı myotherfile.py'ye ulaştığında, kesme noktasında duracaktır.

Ölüm sonrası hata ayıklama

IPython tarafından paylaşıldı 176 Öğe özellikleri. Post mortem hata ayıklama, en azından benim için en iyi özelliktir. Uzun süre çalışan bir komut dosyası çalıştırdığınızı ve 15 dakika çalıştırdıktan sonra aniden çöktüğünü varsayalım. Öyleyse, yapabileceğiniz şey, bazı kesme noktaları belirlemek, yeniden çalıştırmak ve ardından ne olduğunu görmek için 15 dakika daha beklemek? IPython kullanıyorsanız, sadece% debug sihirli komutunu çağırın ve beklemeniz gerekmez. % debug, son istisna oluştuğunda yığın izlemeyi yükler ve hata ayıklayıcıyı başlatır (Python, son işlenmemiş istisnayı sys.last_traceback değişkeninde depolar). Bu iyi bir özelliktir, hata ayıklayıcıyı doğrudan başlatmanıza ve bazı komutları yeniden çalıştırarak saatler kazandırmanıza olanak tanır.

Standart pdb hata ayıklayıcısını kullanıyorsanız, aynı etkiyi import pdb; pdb.pm komutunu çalıştırarak da elde edebilirsiniz.

Hata ayıklayıcıyı otomatik olarak başlatmak için% pdb kullanın

Hata ayıklamayı daha kolay hale getirmenin tek yolu, bir istisna oluştuğunda hata ayıklayıcıyı otomatik olarak başlatmaktır. IPython-% pdb'deki bu sihirli komut bunu başarabilir.

% Pdb 1 (veya% pdb açık) komutunu çalıştırırsanız, hata ayıklayıcı her işlenmeyen istisnada otomatik olarak başlayacaktır. Bu özelliği kapatmak için% pdb 0 kullanabilir veya% pdb on komutunu kapatabilirsiniz. % Pdb'yi herhangi bir parametre olmadan çalıştırmak, otomatik hata ayıklayıcıyı açar ve kapatır.

Orijinal: https: // switowski .com / blog / ipython-debugging

Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.

Hubei'ye katkılarınızdan dolayı teşekkür ederiz. 49 destek E sağlık ekibinin ilk grubu toplam 3787 kişi tahliye edildi
önceki
Didi Zhang Wensong: Açık kaynak ve yerel İnternet açık kaynak hareketi için 20 yıllık coşku
Sonraki
2020 baharında programcı röportajları için olmazsa olmaz! Götürün onu
Tencent'in "İyilik için Teknolojisi" nin çok yalnız olmasına izin vermeyin
Bu kitabın gelişimi sıkıcı, Unity'nin bunun için nasıl parladığını görün
2019, Çin'in açık kaynağının yakıcı yılı
Tencent'in QQ ürünleri tamamen buluta taşındı; Çin Bilimler Akademisi yeni bir programlama dili olan "Mulan" icat etti; Electron 7.1.9 yayınlandı | Geek Headlines
Engelsiz bir Web ortamı nasıl oluşturulur?
"Temiz kod bir aldatmacadır!"
Spring'in zamanlama görevi yapılandırmasını keşfedin
"Kullanıma hazır" bir veri güvenliği koruma sistemi nasıl oluşturulur | Uzman Diyaloğu
2020 ve sonrasında en önemli sekiz teknoloji trendi
Komik: Dize eşleme algoritması nedir?
Ali'de neden k8'ler başarılı olabilir? | Çin'in BT teknolojisinin gelişimiyle ilgili sorular
To Top