Консоль Pydev: проверка значений переменных, кажется, приводит к неожиданному выполнению кода - PullRequest
1 голос
/ 26 января 2012

Я пытаюсь пройти весь процесс проверки формы в django, используя Eclipse / Pydev.Я получаю совершенно неожиданный результат.

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.errors, я прошу parent_form._errors.

Может ли PyDev вычислять parent_form.errors без запроса об этом?Если так, то почему?И почему я не могу поймать эту тихую оценку, установив точки прерывания в getter для parent_form.errors?

1 Ответ

2 голосов
/ 27 января 2012

Когда вы достигаете точки останова и PyDev заполняет представление переменных (где вы можете видеть значение каждой переменной), он выполняет dir () для всех переменных в области действия и getattr () для каждой из них. найденные переменные (это немного упрощает то, что делает отладчик, но это близко к нему) ...

Таким образом, он не может догадаться, будет ли какая-то переменная иметь какой-либо побочный эффект или нет ... Вы можете попробовать закрыть представление переменных, чтобы проверить, будет ли это происходить только в том случае, если переменные действительно запрашиваются (хотя возможно, он запрашивает некоторые вещи, даже если он закрыт, не уверен насчет этого).

...