python - 奇怪的 IPython ipdb 行为

标签 python ipython pdb

我有一些非常奇怪的行为,我只是不理解,因此无法解释,所以我希望这里有人可以帮助我。我注意到的第一件事是 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

在我看来,我有两个交错的调试 session ,我可以以某种奇怪的交替模式访问它们。我怎样才能摆脱它?

编辑: 杀死所有 python 进程并重新运行代码确实有帮助。现在一切都恢复正常了。但由于我只是不明白发生了什么,我会对所发生的事情以及如何重现该行为的答案非常感兴趣。

最佳答案

如果您有两个进程,每个进程都在使用 stdin,它们可能会导致与您描述的非常相似的症状。

>>> 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 是行缓冲,导致 alternating lines 文本传递到交替的进程,在本例中是两个 Python 实例。

关于python - 奇怪的 IPython ipdb 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715724/

相关文章:

python - 将文件写入不存在的目录

python - 我想要在代码中不使用全局变量的解决方法

python - Python 中的并发,多进程比单进程慢

javascript - 在 ipython 笔记本中导入 javascript 文件以创建自定义小部件

python - 是否可以跳过 pdb/ipdb 中的断点?

python - 如何在 Shell 提示时使 python 脚本按 'enter'

ipython - Jupyter 笔记本 - 从命令行 ipython 连接到同一内核 session ?

ipython - jupyter/ipython 中的拆分单元格不起作用

python - 调试时如何跳过抛出异常的行

python - rpdb2 : how to connect to a pid