Pydev控制台:检查变量值似乎导致代码意外执行



我正试图使用Eclipse/Pydev逐步完成django中表单验证的整个过程。我得到了一个完全出乎意料的结果。

parent_form = form_class(request.POST, initial=initial)
debug_type = type(parent_form._errors)
msg = _('created successfully')  # <------- Set breakpoint here

以下是我在控制台里摸索得到的东西。

debug_type
<type 'NoneType'>
type(parent_form._errors)
<class 'django.forms.util.ErrorDict'>

我不明白为什么这两种价值观不同;第一个值应该是"正确的"。

在django源代码中,存在一个名为parent_form.errors的东西(注意错误前没有前导下划线),它是parent_form的一个属性;获取该属性会运行导致_errors从None变为ErrorDict的代码。但我不是得到parent_form错误,我是在请求parent_form_错误。

可能是PyDev在没有询问的情况下评估parent_form.errors吗?如果是,为什么?为什么我不能通过在getter中为parent_form.errors设置断点来捕获这种静默求值?

当您遇到断点,PyDev填充变量视图(在那里您可以看到每个变量的值)时,它将对范围中的所有变量执行dir(),并为找到的每个变量执行getattr()(这有点简化了调试器的操作,但它很接近)。。。

所以,它真的无法猜测某个变量是否会有副作用。。。您可以尝试关闭变量视图,以检查它是否只有在实际请求变量时才会这样做(尽管可能是它请求了一些东西,即使它关闭了,也不确定)。

最新更新