如何在Python中检查变量是否已被赋值

问题描述 投票:0回答:4

我想检查变量是否已被分配。根据这个问题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)
python
4个回答
2
投票

这个问题已经回答了这里

如果变量没有值,则它不存在,因为您无法在没有任何初始化的情况下声明变量。


2
投票

这里有一个简单的方法可以帮助您:

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

0
投票

您无法检查未定义的变量。即使

None
也是对象的一个明确定义的值 - 在许多情况下它是一个很好的默认值。

这是实现您想要的目标的惯用方法:

def testMethod(assignVariable):

    return assignVariable or 0

returnValue = testMethod(False)

您可以避免使用该中间变量,因为它除了作为占位符之外不会添加任何值; python 在内部处理所有这些检查。如果您需要的话,还有一个“三元运算符”。如果是一次性的,功能是可选的。


0
投票
answer

,它使用字符串表示来区分 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


不幸的是,设置为“无”的变量和设置为“无”的变量会产生相同的输出 - 无法赢得全部!

© www.soinside.com 2019 - 2024. All rights reserved.