2014-05-08 99 views
1

我有一个对象使用str(object)转换为字符串。我想检查,使用字符串,如果我有一个None对象(在我的情况下,它永远不会是'None',除非对象是None)。为什么str(None)不是str(None)?

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

问题是条件永远不会通过。我该如何检查这种情况?

同样的方法str(无)是str(无)返回False。为什么?

+0

你已经混淆了平等与身份。试试'string =='None'或string == str(None)'。请参阅http://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs或http://stackoverflow.com/questions/1504717/why-does-comparing-strings-in-python-using - 或者 - 或者 - 有时产生 –

+0

注意不要使用'object'作为变量名称来覆盖内建的'object'构造函数。 – Aerovistae

+1

不要使用'object'作为变量名! '>':-( – dawg

回答

2

每次进行转换时,另一个对象的字符串转换通常不会是同一个对象;它每次都会创建一个新字符串。 is运营商比较身份,而不是价值。你想==

>>> l = [1,2,3] 
>>> str(l) is str(l) 
False 
>>> str(l) == str(l) 
True 
3
if object is None: 
    print("the object is None") 
else: 
    print("the object exists") 
1

首先,object是一个预先定义的类,所有类的共同祖先。但是,它与你的问题无关。

调用string = str(None)之后,变量字符串包含'None',一个python字符串。您可以拨打type(string) # should be <type 'str'>来确认。为了解决这个问题,你可以将其替换为:

  • 字符串== '无'
  • 字符串== STR(无)
  • 如果对象是无匹配无而已其他。
  • 如果对象匹配所有falsy值
1

检查无与Nonetype您知道,任何时候都是有效的可能性。事实上,除非你传入的返回字符串是字符串值'None',你不应该设计你的应用程序来检查字符串比较的可能性。尽管是vs ==运营商的差异。

相关问题