如何检查 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 值被认为是真的,这可以简化。例如,如果variable1variable2re.search 调用的结果,它们将是匹配对象或None,您可以使用:

if variable1 and variable2:
    do_whatever()

【讨论】:

+1。然而,当变量1 形状像foo.bar 并且class foo 中的成员bar 有一个getter 属性时,这可能会产生一些副作用 @starrify:考虑到AttributeErrors 不是NameErrors,在这种情况下它甚至都行不通。 我不是那个意思。你能看看这个代码示例吗? 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 中是不是同时存在两个变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查Python中是不是存在方法?

创建一个函数来检查表中是不是同时存在两个项目

检查appdata中是不是存在文件而不在python代码中添加完整路径

如何检查Go中是不是存在文件?

如何检查 JavaScript 中是不是存在变量?

如何检查 JavaScript 中是不是存在变量?