0

在 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

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

if error var does not exist:Python有什么办法吗?

4

3 回答 3

3

您可以执行以下操作:

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

更新

error = mycharacters.count() >= 5
if error:
    to_json = {"incorrect":"Excedeed maximum"}
else:
    # Save to DB
于 2013-07-24T09:15:41.763 回答
1

要么使用else分支:

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

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

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

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

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

可以检查变量是否存在,但是冗长且编程风格不好。缺少变量应该被认为是编程错误,而不是隐藏的程序状态。

于 2013-07-24T09:32:34.317 回答
0

这是因为当你的第一个条件(第一个 if)失败时,该块将不会执行,因此不会有任何带有 name 的变量error,之后你的第二个条件和 python 解释器没有得到任何带有 name 的变量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具有默认值的变量FalseTrue仅在条件变为真时将其设置为之前。

于 2013-07-24T09:20:34.643 回答