如何检查Python中是否同时存在这两个变量?

如何检查Python中是否同时存在这两个变量?,python,Python,我想用Python编写如下javascript语句: if(variable1&&variable2){ //仅当两个变量都存在时才执行操作 } 我正在努力: 如果不是(variable1和variable2),则为无: #仅当两个变量都存在时才执行操作 但它不工作…当我调试时,变量2未定义,但函数仍尝试运行。怎么了 try: variable1 variable2 except NameError: # Not there else: # They exist

我想用Python编写如下javascript语句:

if(variable1&&variable2){
//仅当两个变量都存在时才执行操作
}

我正在努力:

如果不是(variable1和variable2),则为无:
#仅当两个变量都存在时才执行操作

但它不工作…当我调试时,变量2未定义,但函数仍尝试运行。怎么了

try:
    variable1
    variable2
except NameError:
    # Not there
else:
    # They exist
这是一件非常罕见的事情。在你做这件事之前,确保这是一个好主意

请注意,设置为
None
的变量与不存在的变量不同。如果要检查变量是否为
None
,只需弄乱布尔逻辑语法即可:

if variable1 is not None and variable2 is not None:
    do_whatever()
如果保证not-
None
值在布尔上下文中被视为true,则可以简化此过程。例如,如果
variable1
variable2
re.search
调用的结果,则它们将是匹配对象或
None
,您可以使用:

if variable1 and variable2:
    do_whatever()
这是一件非常罕见的事情。在你做这件事之前,确保这是一个好主意

请注意,设置为
None
的变量与不存在的变量不同。如果要检查变量是否为
None
,只需弄乱布尔逻辑语法即可:

if variable1 is not None and variable2 is not None:
    do_whatever()
如果保证not-
None
值在布尔上下文中被视为true,则可以简化此过程。例如,如果
variable1
variable2
re.search
调用的结果,则它们将是匹配对象或
None
,您可以使用:

if variable1 and variable2:
    do_whatever()

您可以在Python中执行同样的操作

if variable1 and variable2:
    ...
但这意味着,这两个变量都包含在其中

注意:使用未赋值的变量在Python中是错误的

if variable1 and variable2:
    ...
如果你真的想检查变量是否已经定义,你可以使用这个方法,但我不推荐这样做

if (variable1 in locals() and variable2 in locals()):
   ...
如果要检查的变量更多

if all(var in locals() for var in (variable1, variable2, variable3)):

您可以在Python中执行同样的操作

if variable1 and variable2:
    ...
但这意味着,这两个变量都包含在其中

注意:使用未赋值的变量在Python中是错误的

if variable1 and variable2:
    ...
如果你真的想检查变量是否已经定义,你可以使用这个方法,但我不推荐这样做

if (variable1 in locals() and variable2 in locals()):
   ...
如果要检查的变量更多

if all(var in locals() for var in (variable1, variable2, variable3)):

通过布尔运算符连接这两个变量。您实际想要的是
两个比较的结果

if variable1=!None and variable2=!None:
    # do something
除此之外,不存在的变量不是无而是不存在的。 如果要检查变量是否存在,请检查它是否在
globals()
locals()
中定义:


请注意,这里引用了变量,因为您不想计算它们

通过布尔运算符连接这两个变量。您实际想要的是
两个比较的结果

if variable1=!None and variable2=!None:
    # do something
除此之外,不存在的变量不是无而是不存在的。 如果要检查变量是否存在,请检查它是否在
globals()
locals()
中定义:


请注意,这里引用了变量,因为您不想计算它们

为什么这些变量永远不存在?你说的“未定义”是什么意思?它们有时是在先前的if语句中创建的变量,在我的例子中,变量2被传递而未定义。我得到了这个错误:
UnboundLocalError:赋值之前引用的局部变量“variable2”
为什么这些变量永远不存在?你说的不定义是什么意思?它们有时是在先前的if语句中创建的变量,在我的例子中,变量2被传递而没有定义。我得到了这个错误:
UnboundLocalError:赋值前引用的局部变量'variable2'
+1。然而,当像
foo.bar
这样的可变形状出现时,这可能会产生一些副作用,并且
class foo
@starrify中的成员
bar
有一个getter属性:考虑到
AttributeError
不是
NameError
s,在这种情况下它甚至不起作用。你能看一下这个代码示例吗@starrify:我明白你的意思,但是现在用
f
试试,它甚至没有
条属性<例如,code>f=None
。哦,我明白你的意思了。谢谢。:)当我看到你的答案出现时,我正在绞尽脑汁,不幸的是,我使用的方法与你的完全相同。但是现在我认为最好在
locals()
XD+1中手动查找标识符。然而,当像
foo.bar
这样的可变形状出现时,这可能会产生一些副作用,并且
class foo
@starrify中的成员
bar
有一个getter属性:考虑到
AttributeError
不是
NameError
s,在这种情况下它甚至不起作用。你能看一下这个代码示例吗@starrify:我明白你的意思,但是现在用
f
试试,它甚至没有
条属性<例如,code>f=None
。哦,我明白你的意思了。谢谢。:)当我看到你的答案出现时,我正在绞尽脑汁,不幸的是,我使用的方法与你的完全相同。但是现在我认为最好在
locals()
XD中手动查找标识符