为什么str(None)不是str(None)?
我有一个对象,我把它转成了字符串,方法是用 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 个回答
每当你知道某个值可能是空的(也就是 None)时,就要检查一下这个值是不是 None。其实,除非你传入的字符串值真的是 'None',否则在设计你的应用时就不应该用字符串比较来检查这个情况。这里面还有 is 和 == 这两个操作符的区别,不过我们先不讨论这个。
首先,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 这会匹配所有“假”的值。
使用
if string == 'None':
# Do something.
想了解 Python 中 'is' 的意思,可以看看这个链接:What is the semantics of 'is' operator in Python?。
在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,有人可能在使用某个工具或者库的时候,遇到了错误或者不明白的地方。这时候,大家会在一个叫StackOverflow的网站上提问,寻求帮助。
这个网站上有很多经验丰富的程序员,他们会根据自己的经验和知识来回答问题。提问的人可以把自己的问题详细描述出来,甚至附上代码示例,这样其他人就能更好地理解问题所在。
在这个过程中,提问者和回答者之间的互动非常重要。提问者需要清楚地表达自己的问题,而回答者则需要耐心地解释解决方案。通过这种方式,大家可以共同学习,提升自己的编程技能。
总之,StackOverflow是一个很好的学习和交流的平台,适合所有想要提高编程能力的人。
if object is None:
print("the object is None")
else:
print("the object exists")
把其他对象转换成字符串时,每次转换得到的字符串通常都不是同一个对象;每次转换都会生成一个新的字符串。is
这个操作符是用来比较对象的身份,也就是说它比较的是对象本身,而不是它的值。如果你想比较两个对象的值是否相等,应该用==
。
>>> l = [1,2,3]
>>> str(l) is str(l)
False
>>> str(l) == str(l)
True