python generator object_python - 将生成器对象转换为列表以进行调试

本文介绍了一种在IPython环境中调试生成器函数的方法,通过使用特定命令绕开与调试器命令的冲突,实现了对生成器状态的有效检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只需在发电机上拨打help p即可。

lst = list(gen)

lst

请注意,这会影响不会返回任何其他项目的生成器。

您也无法在IPython中直接调用help p,因为它与列出代码行的命令冲突。

测试此文件:

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)

运行时:

$ python code.py

> /home/javl/sandbox/so/debug/code.py(10)()

9

---> 10 g1 = gen()

11

ipdb> n

> /home/javl/sandbox/so/debug/code.py(12)()

11

---> 12 text = "aha" + "bebe"

13

ipdb> lst = list(g1)

ipdb> lst

[1, 2, 3, 4, 5]

ipdb> q

Exiting Debugger.

转义函数/变量/调试器名称冲突的一般方法

存在调试器命令help p和help pp,其将在help exec和prettyprint之后的任何表达式。

所以你可以按如下方式使用它:

$ python code.py

> /home/javl/sandbox/so/debug/code.py(10)()

9

---> 10 g1 = gen()

11

ipdb> n

> /home/javl/sandbox/so/debug/code.py(12)()

11

---> 12 text = "aha" + "bebe"

13

ipdb> p list(g1)

[1, 2, 3, 4, 5]

ipdb> c

还有一个help p命令,通过在表达式前加上help pp来强制调用,它强制调试器将表达式作为Python表达式。

ipdb> !list(g1)

[]

有关详细信息,请参阅help p,help pp和help exec(在调试器中)。

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']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值