Quando eseguo il debug in Python utilizzando IPython, a volte ho raggiunto un punto di interruzione e voglio esaminare una variabile che è attualmente un generatore. Il modo più semplice in cui posso pensare di farlo è convertirlo in una lista, ma non sono chiaro su quale sia un modo semplice per farlo in una riga in ipdb
, dal momento che sono così nuovo in Python.Converti oggetto generatore in elenco per il debug
60
A
risposta
102
Basta chiamare list
sul generatore.
lst = list(gen)
lst
Attenzione, questo influenza il generatore che non restituirà altri articoli.
Non è inoltre possibile chiamare direttamente list
in IPython, poiché è in conflitto con un comando per l'elencazione di righe di codice.
provata su questo file:
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)
che quando viene eseguito:
$ 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.
metodo generale per sfuggire la funzione/nome debugger/variabile in conflitto
ci sono comandi debugger p
e pp
che sarà print
e prettyprint
qualsiasi espressione che li segue.
Così si potrebbe usare come segue:
$ 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
C'è anche un comando exec
, chiamato dal prefisso tua espressione con !
, che costringe debugger di prendere la vostra espressione come Python uno.
ipdb> !list(g1)
[]
Per maggiori dettagli si veda help p
, help pp
e help exec
quando nel 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']
Problemi correlati
- 1. Converti generatore oggetto a un dizionario
- 2. Converti oggetto in enum C#
- 3. Converti un oggetto csv.DictReader in un elenco di dizionari?
- 4. Converti in oggetto datetime
- 5. Converti DataTable in Elenco generico?
- 6. R elenco Converti in minuscolo
- 7. Converti oggetto C# in oggetto Json
- 8. Converti stringa XML a un elenco di mio oggetto
- 9. Converti oggetto grafico in oggetto bitmap
- 10. Converti oggetto in stringa JSON
- 11. Converti stringa in oggetto JSON
- 12. Converti oggetto Scala in XML
- 13. Converti stringa in oggetto dinamico
- 14. Converti matrice nidificata in oggetto
- 15. Converti qualcosa in oggetto Jquery
- 16. Converti oggetto SRE_Match in stringa
- 17. Converti dati modulo in oggetto JSON
- 18. Converti elenco generico in serie di dati in C#
- 19. Converti dizionario in elenco <KeyValuePair>
- 20. Converti tuple in elenco e ritorno
- 21. Converti elenco <DerivedClass> in elenco <BaseClass>
- 22. Converti JSON in oggetto classe in C#
- 23. Converti un elenco di elenchi in un elenco di interi
- 24. Converti elenco nidificato in array 2d
- 25. Converti variabile stringa in un elenco [Groovy]
- 26. Converti Elenco dei KeyValuePair in IDictionary "C#"
- 27. Converti oggetto in vuoto * e ritorno?
- 28. Converti oggetto di stringa JSON in C#
- 29. Converti in oggetto nome della proprietà
- 30. Java Converti oggetto [] matrice in vettore