Разница в 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 позаботится об этой теме.