nosetests ile kesme noktaları ayarlama --pdb seçeneği


88

nosetests --pdbhata ya da başarısızlık durumunda durayım, ama bu benim ihtiyaçlarım için çok geç. Yürütme sırasında kodda adım atmak, sorunun nerede olduğunu ayıklamama yardımcı olur.

Bununla birlikte, nosetestler, göreceli ithalata dayanan testlere (yani bir paketteki testler) izin verdiklerinden faydalıdır.

Testler yürütülmeden önce nasıl kesme noktaları belirleyebilirim? Şu anda kullanıyorum:

python -m pdb /path/to/my/nosetests testfile.py

Bu çözüm yeterli değil. Nosetestler pdb çıkışını engelliyor ve klavye denetimlerim (örneğin ok tuşları) bozuk.

İthal pdb kullanma; pdb.set_trace () iyi bir fikir gibi görünebilir, ancak nosetests pdb konsoluna erişimimi engelliyor.

Yanıtlar:


120

Ekleyebilirsin

import pdb; pdb.set_trace() 

kaynağınızda hata ayıklayıcıda durdurmak istediğiniz herhangi bir yer.

-sYakalamaması için burnuna geçtiğinizden emin olun stdout.


Bunu soruma eklemek üzereydim. Bu da kabul edilebilir bir çözüm değil. Bunu nosetestlerle kullanırken, pdb konsoluna erişim tarandığından ve hiçbir pdb komutunun çalıştırılamadığı için bunun tam anlamıyla kullanılamaz olduğu açıktır.
Devin

26
Stdout'u yakalamasını önlemek için nosetests'e -s bayrağını ekleyin ve pdb'yi gayet iyi kullanabileceksiniz.
Ned Batchelder

1
Çalışmıyor. from nose.tools import set_trace; set_trace()
Şunu

144

Kullanmayı hatırlamaktan daha iyi -solanı set_trace, Nose ile birlikte gelen çeşidi kullanmaktır . Ekle

from nose.tools import set_trace; set_trace()

hata ayıklayıcıya girmek istediğiniz her yerde. Stdin / çıkış yönlendirmesi sizin için halledilecektir. Karşılaştığım tek garip yan etki, runbir burun koşusu sırasında hata ayıklama sırasında kodunuzu pdb'den (kullanarak ) yeniden başlatamamaktır .


Bununla ilgili herhangi bir belge var mı? Döngüden nasıl çıkılır?
AJ

Koşmaya başladıktan sonra nasıl gezinileceğini mi söylüyorsun pdb? Eminim dokümanlar vardır, ancak başımın tepesinden sbir işlev çağrısına "adım atar" n, "sonraki" ifadesine ugider, yığını "yukarı" dhareket ettirir ve "aşağı" hareket eder. Sen kullanabilirsiniz bset kesme noktaları ve c"devam" ve atlama ayıklayıcısını çıkmak için. Umarım yardımcı olur!
Matt Luongo

4
Kabul edilen cevap bu olmalıdır. Orijinal pdb.set_trace () komutunun tüm normal işlevselliğini sağlar.
tbm

Bunun bir ipython / ipdb sürümü için herhangi bir olasılık var mı?
gerrit

5

İpython'unuz varsa , sınırsız kullanım için:

import ipdb; ipdb.set_trace() 

* sınırsız mükemmellik: tıpkı ipython gibi - otomatik tamamlama, renklendirme vb.


1

Pytest kullanıyorsanız , kullanabilirsiniz

import pytest; pytest.set_trace()

Belgelere bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.