我想检查变量是否已被分配。根据这个问题Referring to the null object in Python中的答案,我用
if outputVariable==None
尝试了它,但这不起作用并抛出错误“UnboundLocalError:赋值前引用的局部变量'outputVariable'”。
我有以下代码:
def testMethod(assignVariable):
if assignVariable == True:
outputVariable = 5
if outputVariable==None:
outputVariable = 0
return outputVariable
returnValue = testMethod(False)
知道如何在 return 语句之前检查
outputVariable
是否有值。如果没有,则应赋予其值为 0
更新:根据此处接受的答案如何检查变量是否存在?,我尝试了以下操作,但也没有成功:
def testMethod(assignVariable):
if assignVariable == True:
outputVariable = 5
if outputVariable in locals():
pass
else:
outputVariable = 0
return outputVariable
returnValue = testMethod(False)
这个问题已经回答了这里。
如果变量没有值,则它不存在,因为您无法在没有任何初始化的情况下声明变量。
这里有一个简单的方法可以帮助您:
def tryVar(var):
try:
val = var
except NameError:
return None
return val
在你的代码中,只要在你想要获取变量的地方使用 tryVar(--) ,你就可以通过简单地检查该变量是否存在:
if tryVar(X) is None:
>>>DO WHATEVER
Python 3.8+ 的解决方案,如果你想分配变量,如果它不存在,则在一行中为其分配 0:
Z = x if tryVar(x) is None else x:=0
如果未分配变量,则分配该变量,并返回其值,此外,如果您不想对这些值执行任何操作,也可以:
x if tryVar(x) is None else x:=0
,它使用字符串表示来区分 None 和 False:
def testMethod(assignVariable):
strassignVariable = str(assignVariable)
if strassignVariable == str(False):
return False
return assignVariable or str(None)
yearfirst=None
print(testMethod(yearfirst))
yearfirst=False
print(testMethod(yearfirst))
yearfirst=True
print(testMethod(yearfirst))
yearfirst=7
print(testMethod(yearfirst))
yearfirst='None'
print(testMethod(yearfirst))
给予
无
错误正确
不幸的是,设置为“无”的变量和设置为“无”的变量会产生相同的输出 - 无法赢得全部!
7
无