如何检查python中是否存在这两个变量?

How do I check if both of two variables exists in Python?

本问题已经有最佳答案,请猛点这里访问。

我想用python编写一个类似于javascript的语句:

if (variable1 && variable2) {
// do something only if both variables exist
}

我正在努力:

if not (variable1 and variable2) is None:
# do something only if both variables exist

但是它不起作用…当我调试时,变量2没有被定义,但是函数仍然试图运行。怎么了?


1
2
3
4
5
6
7
try:
    variable1
    variable2
except NameError:
    # Not there
else:
    # They exist

这是一件非常罕见的事情。在你做之前确保这是个好主意。

请注意,设置为None的变量与不存在的变量不同。如果您想检查变量是否是None,那么您只是在混乱布尔逻辑语法:

1
2
if variable1 is not None and variable2 is not None:
    do_whatever()

如果在布尔上下文中保证非None值为真,则可以简化此过程。例如,如果variable1variable2re.search调用的结果,它们要么是匹配对象,要么是None,您可以使用:

1
2
if variable1 and variable2:
    do_whatever()


您可以在Python中执行samething。

1
2
if variable1 and variable2:
    ...

但这意味着,两个变量都有真实的值。

注意:在python中使用未赋值的变量是一个错误。

如果你真的想检查变量是否已经定义好了,你可以使用这个hack,但是我不推荐这样做。

1
2
if (variable1 in locals() and variable2 in locals()):
   ...

如果有更多的变量需要检查,

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


通过布尔运算符连接这两个变量。你真正想要的是两个比较的结果。

1
2
if variable1=!None and variable2=!None:
    # do something

除此之外,不存在的变量不是无而是不存在的。如果要检查变量是否存在,请检查该变量是否在globals()locals()中定义:

1
2
if"variable1" in locals() and"variable2" in locals():
    # do something

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