gpt4 book ai didi

python - 变量交替是否存在于 Python 调试器中

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:50 25 4
gpt4 key购买 nike

谁能解释一下? (Python 2.7,Django 1.7)

foo = data['selected_items']
(Pdb) foo
(Pdb) *** NameError: name 'foo' is not defined
foo
(Pdb) u'1,2'
foo
(Pdb) *** NameError: name 'foo' is not defined
foo
(Pdb) u'1,2'
foo
(Pdb) *** NameError: name 'foo' is not defined
foo
(Pdb) u'1,2'

这是触发它的 View 函数:

def process_form(request, model_name):
form = BulkEditForm(request.POST)
if form.is_valid():
data = form.clean()

if data['select_all']:
pass
else:
import pdb; pdb.set_trace()

请求.POST:

{'select_all': False, 'primary_tech': <Person: Bob>, 'primary_biz': <Person: Mary>, 'selected_items': u'1,2', 'backup_tech': None, 'backup_biz': None}

最佳答案

您有两个线程在同一个断点处停止。

所以基本上,有两个 pdb 实例竞争您的提示,即您的提示在不同线程之间交替。您首先在一个中分配名称 foo,然后另一个有机会运行,对 foo 一无所知,然后当您按下 enter 时,另一个又回来了,定义了 foo

这种情况的最佳指示是您的提示与您的命令及其输出不一致。而不是:

<PROMPT> COMMAND
OUTPUT
<PROMPT> COMMAND
OUTPUT

你看:

COMMAND
<PROMPT> OUTPUT
COMMAND
<PROMPT> OUTPUT

每次您按下回车键时,“其他”线程都会在“第一个”线程设法写入其输出之前潜入其提示。


编辑

在没有 django 的情况下独立复制的简单方法:

from threading import Thread

def f(x):
import pdb; pdb.set_trace()
while True: pass

t1 = Thread(target=lambda: f(1))
t2 = Thread(target=lambda: f(2))
t1.start(); t2.start()

(Pdb) x
2
(Pdb) x
1

关于python - 变量交替是否存在于 Python 调试器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com