Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变量';错误';分配请求前引用_Python_Django - Fatal编程技术网

Python 变量';错误';分配请求前引用

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 问题是,如果没有错误,错误变量将不存在 我还考虑了一种避免这

在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中不存在错误变量:,有什么方法可以执行吗?

您可以执行以下操作:

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;除了名称错误:…
。然而,正如公认的答案所示,这并不是满足您需求的最简单解决方案。