在assignmentRequest之前引用的变量'error'

时间:2013-07-24 09:14:17

标签: python django

在Django应用程序中,我在表单中有一些检查会返回error =“something” 问题是除非有任何错误,否则不会定义该错误。

mycharacters = Character.objects.filter(username_id=request.user.id)

if(mycharacters.count() >= 5):
    error = True
if not error:
    #save to DB

问题是如果没有错误,则不存在错误变量。

我还想过一种可能性,以避免这种错误,即:

error = None
#checks here
if error == None:
    #save to DB

但我不确定这是否是最佳方法。

有没有办法在Python中做if error var does not exist:

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

error = mycharacters.count() >= 5
if not error:
    ...

<强>更新

error = mycharacters.count() >= 5
if error:
    to_json = {"incorrect":"Excedeed maximum"}
else:
    # Save to DB

答案 1 :(得分:1)

使用else分支:

if mycharacters.count() >= 5:
    error = True
else:
    error = False

或将变量初始化为最不可能的值,然后重新分配:

error = False
if mycharacters.count() >= 5:
    error = True

后者通常更容易阅读,但这两种方法都有效(在其他答案中看到的单表达式变体也是如此,即使你需要做更多的事情也难以扩展)。

(请注意,如果您需要做的不仅仅是一个简单的赋值来建立“false”值,if/else构造通常会获胜,但在这种情况下,分配两次的成本是微不足道的。)

检查变量是否存在可以完成,但是编程样式很冗长。丢失的变量应该被认为是编程错误,而不是隐藏的程序状态。

答案 2 :(得分:0)

这是因为当你的第一个条件(第一个if)失败时,那个块将不会执行因此不会有任何名为error的变量,之后你的第二个条件和python解释器没有'获取名称为error的任何变量,这就是为什么它在赋值之前给出了error的参考。

mycharacters = Character.objects.filter(username_id=request.user.id)

if(mycharacters.count() >= 5):
    error = True
if not error:
    #save to DB

因此,在if(mycharacters.count() >= 5)之前,您可以设置默认值为error的变量False,并仅在条件成立时将其设置为True