2010-05-04 14 views
11

mi hanno tale codice in Python:Non abbastanza argomenti per il formato stringa

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 />") 

e l'errore è nel titolo di questo post. Cosa c'è che non va?

+2

Si dispone di due righe in cui viene utilizzata una stringa di formato e l'errore può essere in uno (anche se sembrano subito a prima vista). Quale delle tue linee mostra il traceback? –

+0

Non conosco la linea perché questo è in un errore di classe server. C'è un sistema di registrazione automatica. – Ockonal

+1

senza riproduzione. w/o traceback non è nemmeno possibile vedere se questa particolare funzione causa l'errore – SilentGhost

risposta

17

Il codice fallirebbe se self.turnnow è una tupla vuota:

>>> 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,) 
() 

Questo perché un'espressione tra parentesi in Python non non diventa automaticamente una tupla se la tupla avrebbe solo un elemento. (expr) equivale a expr. (expr,) equivale a una tupla a elemento singolo che contiene expr come primo elemento. Quindi, prova ad aggiungere una virgola dopo self.turnnow nella seconda dichiarazione print.

4

MODIFICA: ignorare questa risposta, non può essere il problema. Tenendo per i commenti.

prova se la sostituzione

(self.turnnow) 

con

(self.turnnow,) 

aiuta (cioè aggiungendo una virgola finale). Il modo in cui ora è che non è una tupla e parens sono semplicemente decorativi. Potrebbe non essere il caso dato che non hai fornito il numero di linea - devi indovinare.

+0

non deve essere una tupla in caso di un singolo argomento. – SilentGhost

+0

@SilentGhost: Giusto, ma se 'self.turnnow' è esso stesso una tupla, ci sarà un problema. Per pensare, però, sarà più probabile "argomenti extra". – doublep

Problemi correlati