处理可能为None的变量

时间:2012-02-16 18:14:40

标签: python django

虽然这与django有关,但它实际上只是一个通用的编程效率问题。

我有一个模板,根据场景,将获得并返回一个或两个表单。如果它返回一个表单,则保存第二个表单的变量将为None。

我需要检查表单是否有效。与an example I read online类似,我在同一if语句中检查两个表单上的.is_valid()。但是,如果第二种形式为None,则毫无疑问会抛出错误(NoneType对象没有属性is_valid)。

如果第二种形式为无,则检查两种表单是否有效而不会导致错误的最佳方法是什么?

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 个答案:

答案 0 :(得分:4)

在检查某些内容是否为None的一般情况下..只需检查一下吗?

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

在Python中,orandshort circuit,这意味着在x and y表达式y中,如果xfalse,则不会对y进行评估{{1}}(因为无论{{1}}是什么,表达式都是假的。)