Обрабатывать переменную, которая может быть None - PullRequest
1 голос
/ 16 февраля 2012

Хотя это связано с django, на самом деле это просто общий вопрос эффективности программирования.

У меня есть шаблон, который в зависимости от сценария будет получать и возвращать одну или две формы.Если он возвращает одну форму, переменная, которая содержит вторую форму, будет None.

Мне нужно проверить, являются ли формы действительными.Подобно примеру, который я прочитал онлайн , я проверяю .is_valid () в обеих формах в одном и том же операторе if.Но это неудивительно, что выдает ошибку (объект NoneType не имеет атрибута is_valid), если второй формой является None.

Каков наилучший способ проверить, что обе формы действительны, не вызывая ошибки, если вторая формаНет?

if request.method == 'POST':

    form = form_dict[modelname][1](request.POST) 
    try:
        form_two = form_dict[modelname][2](request.POST)
    except:
        form_two = None

    if form.is_valid() and form_two.is_valid():
        # Do some stuff and save the data from the form(s)      
    else:
        try:
            form = form_dict[modelname][1]()
            form_two = form_dict[modelname][2]()
        except:
            form_two = None

1 Ответ

4 голосов
/ 16 февраля 2012

В общем случае проверки, если что-то None .. просто проверить это?

if x is not None and x.is_valid():
   ...

В Python or и and оба короткое замыкание , что означает, что в выражении x and y, y не оценивается, если x равно false (поскольку выражение ложно, независимо от того, что y).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...