web-dev-qa-db-fra.com

Python TypeError: pas assez d'arguments pour la chaîne de formatage

Voici la sortie. Celles-ci sont des chaînes utf-8, je crois ... certaines peuvent être NoneType mais elles échouent immédiatement, avant des chaînes comme ça ...

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl

TypeError: pas assez d'arguments pour la chaîne de format

C'est 7 pour 7 si?

123
y2k

Notez que la syntaxe % pour la mise en forme des chaînes devient obsolète. Si votre version de Python le prend en charge, vous devez écrire:

instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl)

Cela corrige également l'erreur que vous aviez par hasard.

153
Simeon Visser

Vous devez mettre les arguments de format dans un tuple (ajouter des parenthèses):

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl)

Ce que vous avez actuellement équivaut à ce qui suit:

intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl

Exemple:

>>> "%s %s" % 'hello', 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> "%s %s" % ('hello', 'world')
'hello world'
221
Andrew Clark

La même erreur s'est produite lors de l'utilisation de % en tant que caractère de pourcentage dans ma chaîne de format. La solution à cela est de doubler le %%.

12
Bruce Jakeway