Więc uruchamiam skrypt w języku Python, w ramach którego wywołuję debugger języka Python, PDB, pisząc:
import ipdb; ipdb.set_trace()
(Wersja PDB iPythona, chociaż nie sądzę, żeby to miało znaczenie; używam go tylko do kolorowego wyjścia).
Teraz, kiedy dojdę do debugera, chcę wykonać instrukcję wielowierszową, taką jak klauzula if lub pętla for, ale gdy tylko wpiszę
if condition:
i naciskam klawisz powrotu, pojawia się komunikat o błędzie *** SyntaxError: invalid syntax (<stdin>, line 1)
Jak można wykonywać wielowierszowe instrukcje w PDB? Jeśli nie jest to możliwe, czy istnieje sposób na obejście tego, aby nadal wykonywać klauzulę if lub pętlę for?
interact
polecenia pdb ( jak dowiedziałem się z tego komunikatu śledzenia błędów ).!
potrzebne wimport
oświadczeniu?!
, aby uniknąć wypadków. Np.c = 42
W pdb kontynuowałoby wykonywanie zamiast przypisywania do zmiennejc
.interact
, ale dla mnie nie działa dobrze ze Spyderem.W python3
ipdb
(ipdb
) mamy polecenie o nazwie interact . Może służyć do:Aby z niego skorzystać, po prostu wpisz
interact
w wierszu polecenia pdb. Jest to przydatne między innymi do stosowania kodu obejmującego wiele linii, a także do unikania przypadkowego wyzwalania innych poleceń pdb.źródło
interact
jest zbyt mocną sugestią. 90% to wszystko, czego kiedykolwiek potrzebuję, afrom IPython import embed; embed()
Moją rekomendacją jest użycie osadzania IPython.
źródło
import embed; embed(user_ns=locals())
.Wewnątrz interpretera lub debugera języka Python (2.7.1) (import pdb) można wykonać instrukcję wielowierszową o następującej składni.
Uwaga: kiedy jestem wewnątrz interpretera, muszę dwukrotnie nacisnąć klawisz Return, zanim kod zostanie wykonany. Jednak w debugerze muszę tylko raz nacisnąć klawisz powrotu.
źródło
Jest to specjalny przypadek, jeśli chcesz, aby kilka poleceń zostało wykonanych po uderzeniu w punkt przerwania. Następnie jest polecenie debugera
commands
. Umożliwia wprowadzenie wielu wierszy poleceń, a następnie zakończenie całej sekwencjiend
słowem kluczowym. Więcej z(pdb) help commands
.źródło
Nie wiem, czy możesz to zrobić, ale to byłaby świetna funkcja dla ipdb. Możesz oczywiście używać list składanych i wykonywać proste wyrażenia wielowierszowe, takie jak:
Możesz również wcześniej napisać kilka funkcji, aby zrobić wszystko, co potrzebujesz, co normalnie zajmie wiele linii.
źródło