2010-05-04 16 views
11

me tienen dicho código en Python:argumentos insuficientes para cadena de formato

def send_start(self, player): 
    for p in self.players: 
     player["socket"].send_cmd('<player id="%s" name="%s" you="%s" avatar="*.png" bank="%s" />'%(self.players.index(p)+1, p['name'], int(player["pid"]==p["pid"]), 0)) 
    player["socket"].send_cmd('<game playerid="%s" />'%(self.turnnow)) 
    player["socket"].send_cmd("<start />") 

Y el error está en el título de este post. ¿Qué pasa?

+2

Tiene dos líneas donde se utiliza una cadena de formato, y el error puede estar en cualquiera de las dos (aunque parezcan correctas a primera vista). ¿Cuál de tus líneas muestra el traceback? –

+0

No sé la línea porque esto es un error de clase de servidor. Hay un sistema de auto-registro. – Ockonal

+1

sin repro. sin rastreo, ni siquiera es posible ver si es esta función particular la que causa el error – SilentGhost

Respuesta

17

Su código sería un error si self.turnnow es una tupla vacía:

>>> var =() 
>>> print "%s" % (var) 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
TypeError: not enough arguments for format string 
>>> print "%s" % (var,) 
() 

Esto se debe a una expresión entre paréntesis en Python hace no se convierten automáticamente en una tupla si la tupla tendría sólo un elemento. (expr) es equivalente a expr. (expr,) es equivalente a una tupla de un elemento que contiene expr como primer elemento. Por lo tanto, intente agregar una coma después de self.turnnow en la segunda declaración print.

4

EDITAR: No tenga en cuenta esta respuesta, no puede ser el problema. Manteniendo los comentarios.

probar si la sustitución de

(self.turnnow) 

con

(self.turnnow,) 

ayuda (es decir, la adición de una coma final). La forma en que es ahora que no es una tupla y los parientes son meramente decorativos. Puede que no sea el caso, ya que no proporcionó el número de línea, tiene que adivinar.

+0

no tiene que ser una tupla en el caso de un solo argumento. – SilentGhost

+0

@SilentGhost: Correcto, pero si 'self.turnnow' es en sí mismo una tupla, habrá un problema. Para pensar, sin embargo, será más probable "argumentos adicionales". – doublep

Cuestiones relacionadas