如何理解 IPython ipdb的行为?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (66)

我注意到的第一件事是ipdb不允许我定义变量:

ipdb> what=5
ipdb> what
*** NameError: name 'what' is not defined
whatelse=6

稍后,我发现ipdb在我的输入中返回了这个(在再次运行代码之后):

dir()
ipdb> ['args', 'content_type', 'function', 'ipdb', 'item_code', 'kwargs', 'object_id', 'request', 'ud_dict', 'update_querydict', 'what', 'whatelse']
what=5
ipdb> what
5
ipdb> whatelse=7
ipdb> whatelse
ipdb> 6
whatelse
ipdb> 7
whatelse
ipdb> 6
whatelse
ipdb> 7

在我看来,这看起来像是我有两个交错的调试会话,怎么做呢?

提问于
用户回答回答于
>>> import subprocess
>>> subprocess.Popen('python', shell=True)
<subprocess.Popen object at 0x0000000001DEFEB8>
>>> Python 2.6.5 (r265:79096, Mar 19 2010, 18:02:59) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> a = 5
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> a
5
>>> a = 6
>>> a
5
>>> a
6
>>> a
5
>>> a
6
>>> a
5
>>> a
6

我第一次调用a,虽然我在上面的行中定义了它,但它还没有定义。我又调用5。然后,我将其设置为6,随后的每个调用在两者之间交替进行。这似乎正是你所经历的。

stdin是行缓冲,导致交变线传递给交替进程的文本,在本例中是Python的两个实例。

扫码关注云+社区

领取腾讯云代金券