Python 2
Pour vérifier si un objet o
est un type de chaîne de caractères d'une sous-classe d'un type de chaîne de caractères :
isinstance(o, basestring)
parce que les deux str
y unicode
sont des sous-classes de basestring
.
Pour vérifier si le type de o
est exactement str
:
type(o) is str
Pour vérifier si o
est une instance de str
ou toute sous-classe de str
:
isinstance(o, str)
Ce qui précède fonctionne également pour les chaînes Unicode si vous remplacez str
con unicode
.
Cependant, il se peut que vous n'ayez pas du tout besoin d'effectuer une vérification explicite des types. Le "Duck typing" peut répondre à vos besoins. Voir http://docs.python.org/glossary.html#term-duck-typing .
Voir aussi Quelle est la façon canonique de vérifier le type en python ?
18 votes
Ce à quoi Jason fait référence, c'est le typage de canard (si ça fait coin-coin comme un canard, c'est probablement un canard). En Python, vous pouvez souvent "laisser votre code fonctionner" sur n'importe quel objet ressemblant à une chaîne de caractères sans vérifier s'il s'agit d'une chaîne ou d'une sous-classe de chaîne. Pour plus d'informations, voir : docs.python.org/glossary.html#term-duck-typing (en anglais)
5 votes
C'est ce que j'aime dans le SO. En général, je pose une question, on ne me répond pas, les gens me disent que je ne devrais pas faire ça de toute façon et pourquoi, et je grandis en tant que programmeur. =)
25 votes
+1 : Ce n'est pas parce qu'une réponse est rarement nécessaire que la question est invalide. Bien que je pense que c'est une bonne chose d'avoir une mise en garde ici, je ne pense pas que cela mérite de rétrograder la question.
17 votes
Il s'agit probablement de l'utilisation la plus légitime de la vérification de type en Python. Les chaînes de caractères sont itérables, donc les distinguer des listes d'une autre manière est une mauvaise idée.
3 votes
Il y a certainement des cas où il est nécessaire de distinguer les chaînes de caractères des autres itérables. Par exemple, voir le code source de PrettyPrinter dans le module pprint.
0 votes
"Si ça ressemble à un canard et que ça fait coin-coin, ça doit être un canard."
1 votes
Je pense que le typage des canards est destiné à fonctionner avec le polymorphisme. Certaines personnes ont une réaction instinctive contre TOUTES les vérifications de type en Python. Le lien de Ben ne s'oppose pas vraiment aux choses où les types ont des comportements fondamentalement différents. Mon interprétation est que le typage de canard est destiné à faire confiance à la Principe de substitution de Liskov
0 votes
Les chaînes de caractères ne sont pas seulement itérables, elles sont aussi itérables de chaînes de caractères . Les distinguer des autres itérables de la chaîne sans "tricher" est presque impossible. Mais il y a de type chaîne de caractères et le code de la tricherie se brise.
0 votes
Comme beaucoup de nouvelles personnes liront probablement ceci : assurez-vous d'abord que vous devez vraiment vérifier. Ma réponse pourrait donner quelques idées sur la façon d'éviter le contrôle.
0 votes
Voir aussi stackoverflow.com/questions/4843173/
0 votes
Je ne peux pas croire que cette question n'a pas de réponse acceptée.