微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列出来自Python调试器的理解范围错误

如何解决列出来自Python调试器的理解范围错误

在Python 3中,interact由于实现理解的方式发生了变化,因此必须先在pdb中使用命令才能访问任何非全局变量

>>> def foo(): [][0]
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in foo
IndexError: list index out of range
>>> import pdb;pdb.pm()
> <stdin>(1)foo()
(Pdb) x = 4
(Pdb) [x for _ in range(2)]
*** NameError: name 'x' is not defined
(Pdb) interact
*interactive*
>>> [x for _ in range(2)]
[4, 4]
>>>

解决方法

在调试代码时,我想使用列表推导。但是,当我在函数内部时,似乎无法从调试器评估列表理解。

我正在使用Python 3.4。

脚本内容

$ cat test.py 
#!/usr/bin/python

def foo():
    x = [1,2,3,4]

    print(x)

foo()

交互式调试:

$ python3 -mpdb test.py                                                                                                                                           
> /tmp/test.py(3)<module>()
-> def foo():
(Pdb) step
> /tmp/test.py(8)<module>()
-> foo()
(Pdb) 
--Call--
> /tmp/test.py(3)foo()
-> def foo():
(Pdb) 
> /tmp/test.py(4)foo()
-> x = [1,4]
(Pdb) 
> /tmp/test.py(6)foo()
-> print(x)
(Pdb) p [x for _ in range(1)]
*** NameError: name 'x' is not defined
(Pdb) p x
[1,4]

为什么x列表理解未知?如何评估调试器的列表理解能力,或实现等效的行为?这是一个错误,还是对调试器的某种基本限制?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。