我想在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没有定义,但函数仍然试图运行。出了什么问题?
答案 0 :(得分:7)
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()
答案 1 :(得分:4)
你可以用Python做同样的事情。
if variable1 and variable2:
...
但这意味着,两个变量都包含Truthy values。
注意:使用尚未赋值的变量是Python中的错误。
如果你真的想检查变量是否已经定义,你可以使用这个hack但是我不会推荐这个
if (variable1 in locals() and variable2 in locals()):
...
如果您想检查更多变量,
if all(var in locals() for var in (variable1, variable2, variable3)):
答案 2 :(得分:2)
通过布尔运算符连接两个变量。你真正想要的是and
两次比较的结果。
if variable1=!None and variable2=!None:
# do something
除此之外,不存在的变量不是None但不存在。
如果要检查变量是否存在,请检查它是否在globals()
或locals()
中定义:
if "variable1" in locals() and "variable2" in locals():
# do something
请注意,这里引用了变量,因为您不想评估它们!