Diferencia en python entre basestring y tipos.StringType?

Cuál es la diferencia entre:

isinstance(foo, types.StringType) 

y

 isinstance(foo, basestring) 

?

Para Python2: basestring es la clase base para str y unicode , mientras que types.StringType es str . Si desea comprobar si algo es una cadena, use basestring . Si desea comprobar si algo es una prueba de bytring, use str y olvídese de los types .

Esto es completamente diferente en Python3.

types ya no tienen StringType
str es siempre unicode
ya no existe la base

Así que trate de no esparcir esas cosas a través de su código demasiado si alguna vez necesita transportarlo

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

Una diferencia bastante importante, me parece ;-).

Para Python 2.x:

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

Por supuesto, esto podría no funcionar para Python 3, pero estoy bastante seguro de que el convertidor 2to3 se ocupará del tema.