assignmentReques前引用的变量“error”

2024-10-02 20:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在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:?你知道吗


Tags: todjangononeid应用程序dbifsave
3条回答

这是因为当第一个条件(first if)失败时,该块将不会执行,因此不会有任何名为error的变量,在第二个条件之后,python解释器也不会得到任何名为error的变量,这就是为什么它在赋值之前给出了errorrefereced。你知道吗

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。你知道吗

您可以执行以下操作:

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

更新

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

使用else分支:

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

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

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

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

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

检查变量是否存在是可以做到的,但这是冗长和糟糕的编程风格。缺少的变量应视为编程错误,而不是隐藏的程序状态。你知道吗

相关问题 更多 >