88 votes

comment savoir si une variable est un tuple, une chaîne de caractères ou un nombre entier ?

J'essaie de résoudre un problème d'incompatibilité de type lors de l'ajout d'une chaîne à une autre chaîne dans une opération de concaténation.

En fait, l'erreur renvoyée est un TypeError (on ne peut pas concaténer une chaîne et un tuple) ; j'aimerais donc savoir où j'ai attribué une valeur sous forme de tuple au lieu de chaîne.

Toutes les valeurs que j'assigne sont des chaînes de caractères, je dois donc déterminer d'où vient le tuple. J'espérais donc qu'il existe un moyen en Python de trouver ce qui est contenu dans une variable et quel est son type.

Jusqu'à présent, nous avons utilisé pdb J'ai pu vérifier le contenu des variables, et j'obtiens correctement les valeurs auxquelles je m'attends ; mais j'aimerais aussi connaître le type de la variable (par logique, si le compilateur est capable de soulever une erreur de type, cela signifie qu'il sait ce qu'il y a à l'intérieur d'une variable et si c'est compatible avec l'opération à effectuer ; il doit donc y avoir un moyen de sortir cette valeur/flag).

Existe-t-il un moyen d'imprimer le type d'une variable en python ?

BTW, j'ai essayé de changer toutes mes variables pour qu'elles soient explicitement des chaînes de caractères, mais ce n'est pas faisable de forcer str (myvar) Je ne peux donc pas utiliser le type chaîne partout où j'utilise des chaînes de caractères.

1voto

Jürgen Strobel Points 1365

Repr(object) donnera une description textuelle de l'objet, qui devrait montrer le type et la valeur. Vous pouvez l'imprimer ou le visualiser dans le débogueur.

Pour les valeurs simples, repr renvoie généralement la même chaîne que celle que vous écririez littéralement en code. Pour les classes personnalisées, il donne le nom de la classe et l'identifiant de l'objet, ou quelque chose d'autre si la classe es

__repr__

est remplacée.

-2voto

WinEunuuchs2Unix Points 366

Pour compléter La réponse de Goujon Considérez cette liste d'entiers et de tuples mélangés :

for f in fills:
    print (type(f), f)
    if type(f)==int : print "INTEGER!!!"

Génère cette sortie :

(<type 'int'>, 0)
INTEGER!!!
(<type 'tuple'>, (62973, 39058, 25708, 102))
(<type 'int'>, 1)
INTEGER!!!
(<type 'tuple'>, (16968, 12069, 3329, 102))
(<type 'int'>, 2)
INTEGER!!!
(<type 'tuple'>, (24939, 62205, 30062, 102))
(<type 'tuple'>, (32911, 32911, 0, 153))
(<type 'tuple'>, (32911, 0, 0, 153))
(<type 'tuple'>, (32911, 0, 32911, 153))
(<type 'tuple'>, (65535, 0, 0, 153))
(<type 'tuple'>, (0, 0, 65535, 153))
(<type 'tuple'>, (0, 32911, 0, 153))
(<type 'tuple'>, (0, 65535, 65535, 153))

Donc le secret n'est pas de tester pour "int" mais plutôt de tester la chaîne de caractères int à la place du mot-clé. Si vous êtes comme moi et que vous migrez depuis le monde des scripts Bash, l'utilisation de == des tests dans le monde des scripts Python sera probablement votre première étape.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X