Разница в python между basestring и types.StringType?

Какая разница между:

isinstance(foo, types.StringType)

и

isinstance(foo, basestring)

?

Ответы

Ответ 1

basestring - базовый класс для str и unicode, а types.StringType - str. Если вы хотите проверить, является ли что-то строкой, используйте basestring. Если вы хотите проверить, является ли что-то байтом, используйте str и забудьте о types.

Ответ 2

Этот материал полностью отличается от Python3

types больше не имеет StringType
str всегда юникод
basestring больше не существует

Так что старайтесь не слишком сильно посыпать этот материал через ваш код, если вам когда-нибудь понадобится его порт

Ответ 3

>>> import types
>>> isinstance(u'ciao', types.StringType)
False
>>> isinstance(u'ciao', basestring)
True
>>> 

Довольно важная разница, мне кажется, -).

Ответ 4

Для Python 2.x:

try:
    basestring        # added in Python 2.3
except NameError:
    basestring = (str, unicode)
...
if isinstance(foo, basestring):
    ...

Конечно, это может не сработать для Python 3, но я уверен, что конвертер 2to3 позаботится об этой теме.