TypeError: pas tous les arguments converti lors de la mise en forme de chaîne python
Le programme est censé prendre en deux noms, et si ils sont de la même longueur, il doit vérifier si elles sont le même mot. Si c'est le même mot, il permet d'imprimer "les noms sont Les mêmes". Si ils sont de la même longueur, mais avec des lettres différentes, il permet d'imprimer "Les noms sont différents, mais la même longueur". La partie que je vais avoir un problème avec est dans le fond de 4 lignes.
#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
elif len(name1) < len(name2):
print ("'{0}'is longer than '{1}'"% name2, name1)
Lorsque j'exécute ce code, il affiche:
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
Toutes les suggestions sont grandement appréciés.
Vous devez vous connecter pour publier un commentaire.
Vous êtes le mélange des différentes fonctions de formatage.
L'ancien style
%
formatage utilise%
codes de mise en forme:Le nouveau style
{}
formatage utilise{}
les codes et les.format
méthodeNoter qu'avec l'ancien style de mise en forme, vous devez spécifier plusieurs arguments à l'aide d'un tuple:
Dans votre cas, puisque vous êtes à l'aide de
{}
les spécificateurs de format, utilisez.format
:f"'It will cost ${your_variable} dollars."
L'erreur est dans votre mise en forme de chaîne.
La façon correcte d'utiliser la mise en forme de chaîne à l'aide de la '%' opérateur est d'utiliser un printf de style de format de chaîne de caractères (la documentation Python pour ce ici: http://docs.python.org/2/library/string.html#format-string-syntax):
Cependant, le '%' opérateur sera probablement obsolète dans le futur. La nouvelle PEP 3101 façon de faire les choses, c'est comme cela:
{}
. Et tout à coup 3.5 apporte PEP 461:%
mise en forme pour les octets. Cela me fait penser à la%
reste pendant une longue période à venir.%
est plus concis. Content qu'il reste avec nous.Pour moi, Cette erreur a été causé quand j'ai été de tenter de passer dans un tuple dans le format de la chaîne de méthode.
J'ai trouvé la solution de cette question/réponse
De copier et de coller la réponse correcte à partir du lien (PAS MON TRAVAIL):
print("this is a tuple: %s" % str(thetuple))
ouprint("this is a tuple: %s" % repr(thetuple))
Dans mon cas, c'est parce que j'ai besoin d'un seul
%s
, je manque de valeurs d'entrée.En plus des deux autres réponses, je pense que les indentations sont aussi incorrecte dans les deux dernières conditions.
Les conditions sont que l'un le nom est plus long que l'autre et ils ont besoin pour commencer avec "elif" et sans entailles. Si vous le mettez dans la première condition (en lui donnant quatre indentations de la marge), il finit par être contradictoire, car les longueurs des noms ne peuvent pas être égaux et différents en même temps.
Il y a une combinaison de problèmes comme l'a fait remarquer dans quelques-uns des autres réponses.
J'ai fourni à la fois l'exemple de .format en tant que bien que passer les tuples à l'argument spécificateur %s. Dans les deux cas, l'indentation a été fixée jusqu'à plus de/moins de contrôles sont à l'extérieur de lorsque la longueur des matches. Également modifiées après si les déclarations de elif est de sorte qu'ils ne fonctionnent que si l'état de la même déclaration était Fausse.
Mise en forme de chaîne avec .format
Mise en forme de chaîne avec %s et d'un n-uplet
Je rencontre l'erreur ainsi,
Mais la liste des arguments bien travailler.
- Je utiliser mysqlclient python lib. La lib ressemble pas à accepter tuple args. Pour passer de la liste des arguments comme
['arg1', 'arg2']
fonctionne.django raw requête sql en vue