2012-06-21 23 views
90

Aquí está la salida. Estos son cadenas UTF-8 creo ... algunos de estos pueden ser NoneType pero falla inmediatamente, antes de que los así ...Python TypeError: no hay suficientes argumentos para la cadena de formato

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

TypeError: no hay suficientes argumentos para cadena de formato

sus 7 para 7 sin embargo?

Respuesta

117

Tenga en cuenta que la sintaxis % para formatear cadenas se está quedando obsoleta. Si su versión de Python lo admite, debe escribir:

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

Esto también corrige el error que tenía.

+0

Esto parece estar mezclando el formato '%' y 'str.format() ', ¿no debería ser esto utilizar llaves en la cadena de formato? –

+0

@ F.J: Sí, tiene razón - He actualizado la respuesta :) –

+0

¿Esto también funciona para el módulo de registro? ¿Es este tipo de interpolación entendido por ella? – AllTradesJack

168

Es necesario poner los argumentos de formato en una tupla (añadir entre paréntesis):

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

Lo que tenemos actualmente es equivalente a la siguiente:

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

Ejemplo:

>>> "%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' 
+2

Eso funcionó ... variedad de. Estaba tratando de usar el formato% s para evitar el error NoneType, pero lo estoy logrando. Relacionado: http://stackoverflow.com/questions/1338690/good-way-of-handling-nonetype-objects-when-printing-in-python – y2k

3

Obtuve el mismo error al usar% como un carácter de porcentaje en mi cadena de formato. La solución a esto es duplicar el %%.

+1

Proporcionar algunos ejemplos de código sobre cómo funciona su solución, y cómo falla sin ella, etc. podría ser útil. Consulte [¿Cómo escribo una buena respuesta?] (Https://stackoverflow.com/help/how-to-answer). Tenga en cuenta que esta es una pregunta de hace 5 años, por lo que debe agregar una respuesta solo si proporciona mucha más información que las que ya están allí. – Ramon

Cuestiones relacionadas