Donc, j'ai ce problème. J'ai eu un tuple (1, 2, 3) que je devrais imprimer avec un formatage de chaîne. par exemple.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
et cela devrait afficher une représentation de tuple avec des crochets, comme
Ceci est un tuple (1,2,3)
Mais je reçois à la TypeError: not all arguments converted during string formatting
place.
Comment diable suis-je capable de faire ça? Un peu perdu ici, alors si vous pouviez m'indiquer la bonne direction :)
print(....)
.Notez que la
%
syntaxe est obsolète. Utilisationstr.format
, qui est plus simple et plus lisible:la source
%
c'est obsolète mais maintenant je t'ai toujours destr.format
toute façon, aveuglément. Peu importe cela, je m'intéresse à ce qu'est le qualificatif complet, car le simple{0}
n'est pas le qualificatif complet, mais simplement un indicateur de position. Pour unint
, ce que j'appelle le qualificatif complet serait{0:d}
(ou{3:d}
par exemple, si l'int à imprimer apparaît en 4ème position dans lastr.format
méthode). J'ai essayé d'imprimer un tuple en utilisant le{0:s}
qualificatif mais cela ne fonctionne pas. Alors, quel est le qualificatif complet pour quelque chose comme un tuple?str
vous pouvez dire{!s}
, mais c'est la valeur par défaut, donc ce n'est pas nécessaire. Si vous souhaitez utiliser à larepr
place, vous pouvez le faire{!r}
. Contrairement à avec%
, il n'y a pas besoin de dired
pour les entiers.%
n'est pas totalement obsolète. En fait,pylint
se plaindra même si vous utilisez la.format
syntaxe dans lelogging
module: stackoverflow.com/a/34634301/534238De nombreuses réponses données ci-dessus étaient correctes. La bonne façon de procéder est:
Cependant, il y a eu un différend quant à savoir si l'
'%'
opérateur String est obsolète. Comme beaucoup l'ont souligné, il n'est certainement pas obsolète, car l''%'
opérateur String est plus facile à combiner une instruction String avec des données de liste.Exemple:
Cependant, en utilisant la
.format()
fonction, vous vous retrouverez avec une déclaration détaillée.Exemple:
De plus, l'
'%'
opérateur de chaîne également utile pour nous de valider le type de données telles que%s
,%d
,%i
, alors que .format () soutenir seulement deux drapeaux de conversion :'!s'
et'!r'
.la source
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Notez qu'il
(tup,)
s'agit d'un tuple contenant un tuple. Le tuple externe est l'argument de l'opérateur%. Le tuple interne est son contenu, qui est en fait imprimé.(tup)
est une expression entre crochets qui, une fois évaluée, donnetup
.(tup,)
avec la virgule de fin est un tuple, qui contienttup
comme seul membre.la source
Cela n'utilise pas de formatage de chaîne, mais vous devriez pouvoir faire:
Si vous voulez vraiment utiliser le formatage de chaîne:
Notez que cela suppose que vous utilisez une version Python antérieure à 3.0.
la source
la source
Même si cette question est assez ancienne et a de nombreuses réponses différentes, je voudrais quand même ajouter la réponse à mon humble avis la plus "pythonique" et aussi lisible / concise.
Puisque la
tuple
méthode d'impression générale est déjà montrée correctement par Antimoine, c'est un ajout pour imprimer chaque élément dans un tuple séparément, comme Fong Kah Chun l'a montré correctement avec la%s
syntaxe.Fait intéressant, cela n'a été mentionné que dans un commentaire, mais l'utilisation d'un opérateur astérisque pour décompresser le tuple offre une flexibilité et une lisibilité complètes en utilisant la
str.format
méthode lors de l'impression des éléments de tuple séparément .Cela évite également d'imprimer une virgule de fin lors de l'impression d'un tuple à un seul élément, comme contourné par Jacob CUI avec
replace
. (Même si à mon humble avis la représentation par virgule de fin est correcte si vous souhaitez conserver la représentation de type lors de l'impression ):la source
Je pense que la meilleure façon de procéder est:
Si vous êtes familier avec le formatage de style printf , Python prend en charge sa propre version. En Python, cela se fait en utilisant l'opérateur "%" appliqué aux chaînes (une surcharge de l'opérateur modulo), qui prend n'importe quelle chaîne et lui applique un formatage de style printf.
Dans notre cas, nous lui disons d'afficher "Ceci est un tuple:", puis en ajoutant une chaîne "% s", et pour la chaîne réelle, nous passons une représentation sous forme de chaîne du tuple (en appelant str ( t)).
Si vous n'êtes pas familier avec le formatage de style printf, je suggère fortement d'apprendre, car c'est très standard. La plupart des langues le prennent en charge d'une manière ou d'une autre.
la source
Veuillez noter qu'une virgule de fin sera ajoutée si le tuple n'a qu'un seul élément. par exemple:
et vous obtiendrez:
dans certains cas, par exemple, vous voulez obtenir une liste entre guillemets à utiliser dans la chaîne de requête mysql comme
vous devez envisager de supprimer la virgule de fin, utilisez replace (',)', ')') après le formatage car il est possible que le tuple n'ait qu'un seul élément comme ('Tom',), donc la virgule de fin doit être supprimée:
Veuillez suggérer si vous avez un moyen décent de supprimer cette virgule dans la sortie.
la source
format()
dans les requêtes de base de données. Il existe des méthodes applicables pour cela dans chaque bibliothèque.format()
avec des valeurs collectées auprès des utilisateurs peut entraîner une injection SQL. Il est plus sûr de valider les valeurs d'entrée avant de les insérer dans la requête. Pour plus d'informations, consultez ces instructions: dev.mysql.com/doc/connector-python/en/ ... Vous pouvez également convertir les valeurs de paramètre en une représentation sous forme de chaîne de type base de données, puis la coller dans la chaîne de requête. Jetez un œil à initd.org/psycopg/docs/usage.html où vous avez un contre-exemple avec un%
opérateur et une solution avec uneexecute()
méthode où les paramètres de requête sont passés dans la méthode args.Outre les méthodes proposées dans les autres réponses, depuis Python 3.6, vous pouvez également utiliser l' interpolation de chaîne littérale (f-strings):
la source
Essayez ceci pour obtenir une réponse:
Si nous ne mettons qu'un seul tuple à l'intérieur (), cela crée un tuple lui-même:
Cela signifie que l'instruction d'impression ci-dessus ressemblera à: print ("Valeur:% s"% ('1', '2')) qui est une erreur!
Par conséquent:
Ci-dessus sera alimenté correctement aux arguments de l'impression.
la source
Pour python 3
la source
Vous pouvez également essayer celui-ci;
Vous ne pouvez pas utiliser
%something
avec(tup)
juste à cause du concept d'emballage et de déballage avec tuple.la source
Talk est bon marché, montrez-vous le code:
la source