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


当前回答

对于类似字符串的良好鸭子类型方法,它具有与Python 2同时使用的好处。X和3.x:

def is_string(obj):
    try:
        obj + ''
        return True
    except TypeError:
        return False

Wisefish在切换到isinstance方法之前与duck-typing很接近,只是+=对于列表的含义与+不同。

其他回答

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返回一个字符串。

Python 3

在Python 3中。x basestring不再可用,因为str是唯一的字符串类型(与Python 2的语义相同)。x的unicode)。

Python 3中的检查。X就是:

isinstance(obj_to_test, str)

这遵循了官方2to3转换工具的修复:将basestring转换为str。

if type(varA) == str or type(varB) == str:
    print 'string involved'

从 EDX -在线课程 MITx: 6.00.1x使用Python的计算机科学和编程介绍