Sé que este es un tema antiguo, pero al ser el primero que se muestra en Google y dado que no encuentro ninguna de las respuestas satisfactorias, lo dejaré aquí para referencia futura:
six es una biblioteca de compatibilidad de Python 2 y 3 que ya cubre este problema. Entonces puedes hacer algo como esto:
import six
if isinstance(value, six.string_types):
pass # It's a string !!
Al inspeccionar el código, esto es lo que encuentra:
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,