如何检查Python对象是否为字符串(常规或Unicode)?


当前回答

isinstance(your_object, basestring)

如果对象确实是字符串类型,则为True。'str'是保留字。

我的道歉, 正确的答案是使用'basestring'而不是'str',以便它也包括unicode字符串-正如上面其他响应者之一所指出的那样。

其他回答

isinstance(your_object, basestring)

如果对象确实是字符串类型,则为True。'str'是保留字。

我的道歉, 正确的答案是使用'basestring'而不是'str',以便它也包括unicode字符串-正如上面其他响应者之一所指出的那样。

你可以通过连接一个空字符串来测试它:

def is_string(s):
  try:
    s += ''
  except:
    return False
  return True

编辑:

更正我的回答后的评论指出,这失败与列表

def is_string(s):
  return isinstance(s, basestring)

我认为可以安全地假设,如果repr()输出的最后一个字符是'或',那么无论它是什么,它都可以被认为是某种字符串。

def isStr(o):
    return repr(o)[-1] in '\'"'

我假设repr不会做任何太繁重的事情,它会返回一个至少有一个字符的字符串。您可以使用类似的方法来支持空字符串

repr(o)[-1:].replace('"', "'") == "'"

但这仍然假设repr返回一个字符串。

我可能会像其他人提到的那样,用鸭子类型来处理这个问题。我怎么知道一个字符串真的是一个字符串?显然是通过将其转换为字符串!

def myfunc(word):
    word = unicode(word)
    ...

如果arg已经是一个字符串或unicode类型,real_word将保持其值不变。如果传递的对象实现了__unicode__方法,则该方法用于获取其unicode表示。如果传递的对象不能作为字符串使用,unicode内置将引发异常。

我发现这句话更夸张:

if type(aObject) is str:
    #do your stuff here
    pass

由于类型对象是单例的,is可以用来比较对象和STR类型