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


当前回答

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

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

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

其他回答

Python 2

检查对象o是否是字符串类型的子类的字符串类型:

isinstance(o, basestring)

因为STR和unicode都是basestring的子类。

要检查o的类型是否恰好是str:

type(o) is str

检查o是否是str的实例或str的任何子类:

isinstance(o, str)

如果将str替换为Unicode,上述方法也适用于Unicode字符串。

但是,您可能根本不需要进行显式类型检查。“鸭子打字”可能适合你的需要。见http://docs.python.org/glossary.html # term-duck-typing。

参见python中检查类型的规范方法是什么?

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

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

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

Python 2和3

(cross-compatible)

如果你想检查不考虑Python版本(2。x vs . 3.x),使用six (PyPI)及其string_types属性:

import six

if isinstance(obj, six.string_types):
    print('obj is a string!')

在六个(一个非常轻量级的单文件模块)中,它只是这样做的:

import sys
PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str
else:
    string_types = basestring

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

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

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

Python 2

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

文档。