如何检查 Python 中是不是同时存在两个变量? [复制]
Posted
技术标签:
【中文标题】如何检查 Python 中是不是同时存在两个变量? [复制]【英文标题】:How do I check if both of two variables exists in Python? [duplicate]如何检查 Python 中是否同时存在两个变量? [复制] 【发布时间】:2014-03-25 17:01:05 【问题描述】:我想用 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 未定义,但该函数仍试图运行。怎么了?
【问题讨论】:
为什么这些变量永远不存在? 未定义是什么意思? 它们是有时在之前的 if 语句中创建的变量,在我的例子中,变量 2 被传递并没有定义。我收到此错误:UnboundLocalError: local variable 'variable2' referenced before assignment
【参考方案1】:
您通过布尔运算符连接两个变量。您真正想要的是and
两次比较的结果。
if variable1=!None and variable2=!None:
# do something
除此之外,一个不存在的变量不是 None 而是不存在的。
如果要检查变量是否存在,检查是否定义在globals()
或locals()
中:
if "variable1" in locals() and "variable2" in locals():
# do something
请注意,这里引用了变量,因为您不想评估它们!
【讨论】:
【参考方案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
值被认为是真的,这可以简化。例如,如果variable1
和variable2
是re.search
调用的结果,它们将是匹配对象或None
,您可以使用:
if variable1 and variable2:
do_whatever()
【讨论】:
+1。然而,当变量1 形状像foo.bar
并且class foo
中的成员bar
有一个getter 属性时,这可能会产生一些副作用
@starrify:考虑到AttributeError
s 不是NameError
s,在这种情况下它甚至都行不通。
我不是那个意思。你能看看这个代码示例吗? gist.github.com/starrify/9183346
@starrify:我明白你的意思,但现在尝试使用甚至没有bar
属性的f
。以f=None
为例。
哦,我明白你的意思了。谢谢你。 :) 当我看到你的答案出现时,我正在写自己的答案,不幸的是我使用的方法与你的完全相同。但是现在我认为最好在locals()
中手动查找标识符 XD【参考方案3】:
你可以在 Python 中做同样的事情。
if variable1 and variable2:
...
但这意味着,两个变量都包含Truthy values。
注意:使用未赋值的变量在 Python 中是错误的。
如果你真的想检查变量是否已经定义,你可以使用这个技巧,但我不推荐这个
if (variable1 in locals() and variable2 in locals()):
...
如果有更多变量要检查,
if all(var in locals() for var in (variable1, variable2, variable3)):
【讨论】:
以上是关于如何检查 Python 中是不是同时存在两个变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章