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


当前回答

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

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

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

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

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

其他回答

如果有人想远离显式类型检查(有很好的理由远离它),可能字符串协议中最安全的检查部分是:

str(maybe_string) == maybe_string

它不会遍历iterable或迭代器,它不会将字符串列表调用为字符串,它会正确地将类似字符串的对象检测为字符串。

当然也有缺点。例如,str(maybe_string)可能是一个繁重的计算。通常情况下,答案是视情况而定。

编辑:正如@Tcll在评论中指出的那样,这个问题实际上要求一种同时检测unicode字符串和字节字符串的方法。在Python 2上,这个答案将失败,对于包含非ascii字符的unicode字符串会出现异常,在Python 3上,它将对所有字节字符串返回False。

isinstance(your_object, basestring)

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

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

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

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

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

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

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

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

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

Python 2

对于测试对象obj,使用isinstance(obj, basestring)。

文档。