Python 变量';错误';分配请求前引用
在Django应用程序中,我使用返回error=“something”的表单进行一些检查。Python 变量';错误';分配请求前引用,python,django,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 问题是,如果没有错误,错误变量将不存在 我还考虑了一种避免这
问题是,除非有任何错误,否则不会定义该错误
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中不存在错误变量:,有什么方法可以执行吗?您可以执行以下操作:
error = mycharacters.count() >= 5
if not error:
...
更新
error = mycharacters.count() >= 5
if error:
to_json = {"incorrect":"Excedeed maximum"}
else:
# Save to DB
您可以执行以下操作:
error = mycharacters.count() >= 5
if not error:
...
更新
error = mycharacters.count() >= 5
if error:
to_json = {"incorrect":"Excedeed maximum"}
else:
# Save to DB
这是因为当您的第一个条件(first if)失败时,该块将不会执行,因此不会有任何名为
error
的变量,在此之后,您的第二个条件和python解释器不会得到任何名为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时才将其设置为True
。这是因为当您的第一个条件(第一个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时将其设置为True
。使用else
分支:
if mycharacters.count() >= 5:
error = True
else:
error = False
或将变量初始化为最不可能的值,然后重新分配:
error = False
if mycharacters.count() >= 5:
error = True
后者通常更容易阅读,但两种方法都有效(在其他答案中看到的单一表达式变体也是如此,即使如果你需要做更多的事情,这很难扩展)
(请注意,如果您需要做的不仅仅是一个简单的赋值来确定“false”值,if/else
构造通常会获胜,但在这种情况下,两次赋值的成本是微乎其微的。)
可以检查变量是否存在,但这是冗长且糟糕的编程风格。缺少变量应视为编程错误,而不是隐藏的程序状态。使用或分支:
if mycharacters.count() >= 5:
error = True
else:
error = False
或将变量初始化为最不可能的值,然后重新分配:
error = False
if mycharacters.count() >= 5:
error = True
后者通常更容易阅读,但两种方法都有效(在其他答案中看到的单一表达式变体也是如此,即使如果你需要做更多的事情,这很难扩展)
(请注意,如果您需要做的不仅仅是一个简单的赋值来确定“false”值,if/else
构造通常会获胜,但在这种情况下,两次赋值的成本是微乎其微的。)
可以检查变量是否存在,但这是冗长且糟糕的编程风格。缺少的变量应被视为编程错误,而不是隐藏的程序状态。如果我需要在error=True
下面添加一行额外的代码,该怎么办?@Jerry,例如..?编写一个特定的错误,如到_json={“error”:“excedect max”}
有趣的两种替代方法,虽然我必须坚持我的,因为我有不止一件事要检查。我想没有其他更清洁的选择是可能的。谢谢@falsetru:)如果我需要在error=True
下面加一行怎么办?@Jerry,例如..?写一个特定的错误,比如到_json={“不正确”:“excedect max”}
有趣的两种方法,尽管我必须坚持我的方法,因为我有不止一件事要检查。我想没有其他更清洁的选择是可能的。感谢@falsetru:)PEP 8中的一个提示:与None之类的单例进行比较时,应该始终使用is或is,而不要使用相等运算符。
@Haidro感谢您的提示。Python中有一种方法可以实现“if error var note existing”(如果error var不存在):您可以尝试:error;除了名称错误:…
。然而,正如公认的答案所示,这并不是满足您需求的最简单的解决方案。只需PEP 8中的一条说明:与“无”之类的单例进行比较时,应始终使用“是”或“不是”,永远不要使用相等运算符。
@Haidro感谢您的提示。有一种方法可以做到“如果错误变量不存在”在Python中:您可以try:error;除了名称错误:…
。然而,正如公认的答案所示,这并不是满足您需求的最简单解决方案。