【问题标题】:Python how to check if variable exist and its length, in one if statement?Python如何在一个if语句中检查变量是否存在及其长度?
【发布时间】:2011-09-22 05:44:11
【问题描述】:

这是我的情况:

if var:
    if len(var) == 5:
        do something...
else:
    do the same thing...

为避免重复同一段代码,我想将这两个 if 条件合并为一个。但是如果 var 是 None,我无法检查它的长度......知道吗? 我想要这样的东西:

if var and len(var) == 5:
    do something...

【问题讨论】:

  • 你的建议很好。 if var and len(var) == 5 会工作
  • 除了大家已经说过的(即你的建议确实如你所愿)之外,如果你要做同样的事情,为什么还要检查长度?另请注意,一般而言,当您有一段代码不想重复时,要使用的工具是函数或方法(取决于代码需要多少上下文)。
  • 我不应该在晚上问问题,希望在早上得到答案......我确定我试过了,它没有用......

标签: python if-statement


【解决方案1】:

你试过了吗?它有效:

if var and len(var) == 5:
    ....

如果 LHS 为假,and 运算符不会评估 RHS。试试这个:

>>> False and 1/0
False
>>> True and 1/0
ZeroDivisionError: division by zero

【讨论】:

  • 如果 var 不存在,他也想做点什么,不是吗?
  • @steabert:将notelse 添加到您认为合适的代码中。我不是来写你的代码,只是来回答问题。
  • 这里有一个障碍(可能与@Tickon 相关也可能不相关):此解决方案不区分var == []var is None 的情况。在前一种情况下,len(var) 可以确定(== 0),在后一种情况下则不能。 (但是,我不认为这是对这个答案投反对票的理由)
  • @Tim Pietzcker:但如果是var == [],那么len(var) != 5,不是吗?
  • @DietrichEpp:是的。我认为对于布尔代数来说现在还为时过早:)
【解决方案2】:

您在问题中编写的代码在两种情况下执行语句:

  • var 计算结果为真,长度为 5
  • var 计算结果为 false(例如,它是 NoneFalse

您可以将它们组合成一个条件,如下所示:

if not var or len(var) == 5:
    ...

其他一些答案建议的条件var and len(var) == 5 在第一种情况下仅评估为True,而不是第二种情况。不过,我要说的是,您选择的两种情况是一种不寻常的组合。您确定不打算仅在变量具有非假值并且长度为 5 时才执行语句吗?

此外,正如 6502 在评论中所写,函数正是针对这种情况而设计的,即制作可重用的代码块。所以另一个简单的解决方案是

 def f():
     ....
 if var:
     if var.length == 5:
         f()
 else:
     f()

【讨论】:

    【解决方案3】:

    好吧,这里的例外似乎完全没问题。

    try:
        if len(var) == 5:
            do_something()
    except TypeError:
        pass
    

    您是说var 可以为空,因此会抛出TypeError 异常。但是,如果事实上var 可能根本不存在,您应该捕获NameError 异常。

    【讨论】:

    • 这是完全符合@Tickon 要求的解决方案。仅当var is None(或其他不可下标类型,但此处未要求)时,才会触发异常。而且它更符合 Pythonic 的价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多