【问题标题】:Problem with Python's is None test?Python 的问题 is None 测试?
【发布时间】:2011-06-27 18:19:14
【问题描述】:

我喜欢对空变量使用 is None 测试,它非常灵活、简单且有用。它现在似乎已经停止工作:

>"" is None
False

>[] is None
False

>{} is None
False

发生了什么事?

我在 Debian/Sid i686 GNU/Linux 上使用 Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) [GCC 4.4.5]。

编辑:来自 Sven Marnach 的关于使用 bool("") 的绝妙提示。 brb,去编辑一些代码...

【问题讨论】:

  • 这根本不应该奏效...is None 不是用于测试空变量,而是用于精确 测试它们是否为None

标签: python


【解决方案1】:

测试x is None 测试x 是否真的 None 对象(即,如果名称x 引用对象None)。你要找的是truth value testing:

if "":
    print "non-empty"
else:
    print "empty"

if 将条件隐式转换为bool。你也可以明确地这样做:

>>> bool("")
False
>>> bool("x")
True

【讨论】:

    【解决方案2】:

    嗯...这从来没有奏效。 is 测试实例身份——即使{} is {} 是假的。

    >>> {} is {}
    False
    

    【讨论】:

      【解决方案3】:

      只有NoneNone。我认为您正在寻找的是空 listdictstr 的布尔值

      例如:

      >>> if "":
      ...     print 'woo'
      ... else:
      ...     print 'hoo'
      ...
      hoo
      

      {}[] 相同

      【讨论】:

        【解决方案4】:

        它从来没有工作过。只有None is NoneTrue

        【讨论】:

          【解决方案5】:

          如果您只想检查空值,最好使用以下内容:

          a = {}
          b = []
          c = ""
          
          if a:
              print 'non-empty dict'
          else:
              print 'empty dict'
          
          if b:
              print 'non-empty list'
          else:
              print 'empty list'
          
          if c:
              print 'non-empty string/value'
          else:
              print 'empty string/value'
          

          【讨论】:

            猜你喜欢
            • 2018-03-03
            • 2011-02-12
            • 1970-01-01
            • 2018-11-29
            • 1970-01-01
            • 1970-01-01
            • 2021-07-07
            • 1970-01-01
            • 2019-04-06
            相关资源
            最近更新 更多