Podczas debugowania w Pythonie za pomocą IPython, czasami uderzam w punkt przerwania i chcę zbadać zmienną, która jest obecnie generatorem. Najprostszy sposób, w jaki mogę to zrobić, to przekształcenie go na listę, ale nie jestem pewien, co to jest łatwy sposób na zrobienie tego w jednym wierszu w ipdb
, ponieważ jestem nowy w Pythonie.Konwersja obiektu generatora na listę w celu debugowania
60
A
Odpowiedz
102
Po prostu zadzwoń pod list
na generator.
lst = list(gen)
lst
Należy pamiętać, że ma to wpływ na generator, który nie zwróci żadnych dalszych elementów.
Nie można również bezpośrednio wywoływać list
w IPython, ponieważ powoduje konflikt z poleceniem dla listy linii kodu.
Testowane na tego pliku:
def gen():
yield 1
yield 2
yield 3
yield 4
yield 5
import ipdb
ipdb.set_trace()
g1 = gen()
text = "aha" + "bebe"
mylst = range(10, 20)
który po uruchomieniu:
$ python code.py
> /home/javl/sandbox/so/debug/code.py(10)<module>()
9
---> 10 g1 = gen()
11
ipdb> n
> /home/javl/sandbox/so/debug/code.py(12)<module>()
11
---> 12 text = "aha" + "bebe"
13
ipdb> lst = list(g1)
ipdb> lst
[1, 2, 3, 4, 5]
ipdb> q
Exiting Debugger.
Ogólny sposób ucieczki funkcji/zmienną/nazwę debugger konflikty
Istnieje poleceń debugger p
i pp
że będzie print
i prettyprint
każde wyrażenie następujące po nich.
więc można go używać w następujący sposób:
$ python code.py
> /home/javl/sandbox/so/debug/code.py(10)<module>()
9
---> 10 g1 = gen()
11
ipdb> n
> /home/javl/sandbox/so/debug/code.py(12)<module>()
11
---> 12 text = "aha" + "bebe"
13
ipdb> p list(g1)
[1, 2, 3, 4, 5]
ipdb> c
Istnieje również komenda exec
, zwany poprzedzając swój wyraz z !
debugger, który zmusza do podjęcia wyraz jak Python jednym.
ipdb> !list(g1)
[]
Aby uzyskać więcej informacji, zobacz help p
help pp
i help exec
kiedy debugger.
ipdb> help exec
(!) statement
Execute the (one-line) statement in the context of
the current stack frame.
The exclamation point can be omitted unless the first word
of the statement resembles a debugger command.
To assign to a global variable you must always prefix the
command with a 'global' command, e.g.:
(Pdb) global list_options; list_options = ['-l']
Powiązane problemy
- 1. Konwersja słownika na listę
- 2. Konwersja listy System.Array na listę
- 3. Konwersja z IEnumerable na listę
- 4. Konwertuj Newtonsoft.Json.Linq.JArray na listę określonego typu obiektu
- 5. konwersja liczby całkowitej na listę w pythonie
- 6. Konwersja obiektu NSData na NSString
- 7. Konwersja listę obiektów do tablicy jednej z właściwości obiektu
- 8. Należy przerwać _NSLockError() w celu debugowania ... Jak?
- 9. Wyłączanie zawijania wyjątków WPF w celu debugowania
- 10. Konwersja listę na ciąg iz powrotem
- 11. Konwersja ciąg do datetime.time obiektu
- 12. Konwersja listę numpy tablicy
- 13. Konwersja obiektu do wartości mieszania w Ruby
- 14. Joda Time - Konwersja obiektu kalendarza na LocalDate
- 15. Konwersja obiektu std :: unique_ptr
- 16. Stwórz listę kwadratowych potęg liczb w zakresie wykorzystaniem generatora
- 17. Konwersja obiektu graficznego na obiekt bitmapowy
- 18. Migrowanie danych podstawowych debugowania w celu porównania wartości mieszania
- 19. konwersja ciąg datetime obiektu
- 20. Konwersja data- * atrybuty do obiektu
- 21. Zastosuj listę funkcji Pythona w celu elegancko
- 22. Konwersja listę obiektu Osoba do wydzielonej przez getName String() własność osoby obiektu
- 23. Konwersja listę list do krotki w Pythonie
- 24. Konwersja tablicy znaków na listę w języku Java
- 25. Konwersja listę numerów do zakresów
- 26. Wyszukiwanie stylów wbudowanych w JavaScript w celu debugowania kodu JavaScript
- 27. Owijanie usługi C# w aplikacji konsolowej w celu jej debugowania
- 28. Konwersja obiektu dict na ciąg w szablonie Django/Jinja2
- 29. Konwersja obiektu .Net do obiektu JSON w widoku
- 30. Jak wywołać listę Pythona podczas debugowania?