为什么str(None)不是str(None)?

1 投票
5 回答
2921 浏览
提问于 2025-04-18 05:46

我有一个对象,我把它转成了字符串,方法是用 str(object)。我想用这个字符串来检查一下,看看我是否有一个 None 对象(在我的情况下,只有对象是 None 时,它才会显示为 'None')。

string = str(object) // object is None
if string is 'None' or string is str(None):
  // do something

问题是这个条件总是判断不通过。我该怎么检查这个情况呢?

就像str(None) 是 str(None) 这个判断返回的是 False。为什么会这样呢?

5 个回答

1

每当你知道某个值可能是空的(也就是 None)时,就要检查一下这个值是不是 None。其实,除非你传入的字符串值真的是 'None',否则在设计你的应用时就不应该用字符串比较来检查这个情况。这里面还有 is 和 == 这两个操作符的区别,不过我们先不讨论这个。

1

首先,object 是一个预定义的类,所有类的共同祖先。不过,这和你的问题没有关系。

当你执行 string = str(None) 后,变量 string 里面存的是 'None',这是一个 Python 字符串。你可以通过 type(string) # 应该是 <type 'str'> 来确认这一点。要解决这个问题,你可以用以下几种方式替换:

  • string == 'None' 这会检查 string 是否等于字符串 'None'。
  • string == str(None) 这会检查 string 是否等于字符串形式的 None。
  • if object is None 这会只匹配 None,其他的都不匹配。
  • if object 这会匹配所有“假”的值。
2

使用

if string == 'None':
   # Do something.

想了解 Python 中 'is' 的意思,可以看看这个链接:What is the semantics of 'is' operator in Python?

3

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,有人可能在使用某个工具或者库的时候,遇到了错误或者不明白的地方。这时候,大家会在一个叫StackOverflow的网站上提问,寻求帮助。

这个网站上有很多经验丰富的程序员,他们会根据自己的经验和知识来回答问题。提问的人可以把自己的问题详细描述出来,甚至附上代码示例,这样其他人就能更好地理解问题所在。

在这个过程中,提问者和回答者之间的互动非常重要。提问者需要清楚地表达自己的问题,而回答者则需要耐心地解释解决方案。通过这种方式,大家可以共同学习,提升自己的编程技能。

总之,StackOverflow是一个很好的学习和交流的平台,适合所有想要提高编程能力的人。

if object is None:
    print("the object is None")
else:
    print("the object exists")
2

把其他对象转换成字符串时,每次转换得到的字符串通常都不是同一个对象;每次转换都会生成一个新的字符串。is这个操作符是用来比较对象的身份,也就是说它比较的是对象本身,而不是它的值。如果你想比较两个对象的值是否相等,应该用==

>>> l = [1,2,3]
>>> str(l) is str(l)
False
>>> str(l) == str(l)
True

撰写回答