Allez-y et utilisez isinstance
si vous en avez besoin. C'est un peu mal, car il exclut les séquences personnalisées, les itérateurs et autres choses dont vous pourriez avoir besoin. Cependant, vous devez parfois vous comporter différemment si quelqu'un, par exemple, passe une chaîne. Ma préférence serait de vérifier explicitement str
ou unicode
comme ceci:
import types
isinstance(var, types.StringTypes)
NB Ne confondez pas types.StringType
pour types.StringTypes
. Ce dernier intègre str
et unicode
objets.
Le types
module est considéré par beaucoup comme obsolète en faveur de la vérification directe par rapport au type de l'objet, donc si vous préférez ne pas utiliser ce qui précède, vous pouvez également vérifier explicitement str
et unicode
, comme ceci:
isinstance(var, (str, unicode)):
Éditer:
Mieux vaut encore:
isinstance(var, basestring)
Fin de la modification
Après l'un ou l'autre de ces éléments, vous pouvez vous remettre à vous comporter comme si vous obteniez une séquence normale, laissant les non-séquences lever des exceptions appropriées.
Voyez ce qui est "mal" à propos de la vérification de type, ce n'est pas que vous souhaitiez peut-être vous comporter différemment pour un certain type d'objet, c'est que vous limitez artificiellement votre fonction de faire la bonne chose avec des types d'objet inattendus qui autrement feraient la bonne chose. Si vous avez une solution de secours finale qui n'est pas vérifiée par type, vous supprimez cette restriction. Il convient de noter que trop de vérification de type est une odeur de code qui indique que vous voudrez peut-être effectuer une refactorisation, mais cela ne signifie pas nécessairement que vous devriez l'éviter du getgo.