Siga adelante y utilícelo isinstance
si lo necesita. Es algo malvado, ya que excluye secuencias personalizadas, iteradores y otras cosas que realmente pueda necesitar. Sin embargo, a veces debe comportarse de manera diferente si alguien, por ejemplo, pasa una cadena. Mi preferencia sería verificar explícitamente str
o de esta unicode
manera:
import types
isinstance(var, types.StringTypes)
NB No te confundas types.StringType
con types.StringTypes
. Este último incorpora str
y unicode
objetos.
El types
módulo es considerado por muchos como obsoleta en favor de sólo la comprobación directamente contra el tipo del objeto, así que si usted prefiere no utilizar el anterior, alternativamente, puede comprobar de forma explícita en contra str
y unicode
, de esta manera:
isinstance(var, (str, unicode)):
Editar:
Mejor aún es:
isinstance(var, basestring)
Finalizar edición
Después de cualquiera de estos, puede volver a comportarse como si estuviera obteniendo una secuencia normal, dejando que las no secuencias generen las excepciones apropiadas.
Vea que lo "malo" de la verificación de tipos no es que desee comportarse de manera diferente para un determinado tipo de objeto, es que restringe artificialmente su función de hacer lo correcto con tipos de objetos inesperados que de otro modo harían lo correcto. Si tiene una copia de seguridad final que no está marcada, elimine esta restricción. Cabe señalar que demasiada verificación de tipo es un olor a código que indica que es posible que desee refactorizar, pero eso no significa necesariamente que deba evitarlo desde el principio.