Какая разница между:
isinstance(foo, types.StringType)
и
isinstance(foo, basestring)
Для Python2: basestring является базовым классом для str и unicode, а types.StringType - str. Если вы хотите проверить, является ли что-то строкой, используйте basestring. Если вы хотите проверить, является ли что-то байтовой строкой, используйте str и забудьте о types.
basestring
str
unicode
types.StringType
types
Этот материал в Python3 совершенно другой
types больше не имеет StringType str всегда Unicode basestring больше не существует
StringType
Поэтому постарайтесь не слишком разбрызгивать эти вещи через ваш код, если вам когда-нибудь понадобится его портировать
>>> import types >>> isinstance(u'ciao', types.StringType) False >>> isinstance(u'ciao', basestring) True >>>
Довольно важное отличие, как мне кажется; -).
Для Python 2.x:
try: basestring # added in Python 2.3 except NameError: basestring = (str, unicode) ... if isinstance(foo, basestring): ...
Конечно, это может не сработать для Python 3, но я вполне уверен, что конвертер 2to3 позаботится о теме.