2010-05-04 60 views
11

我有這樣的代碼在Python:沒有足夠的參數格式字符串

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

和錯誤是在這篇文章的標題。怎麼了?

+2

你有兩行代碼使用格式字符串,並且其中任何一個代碼都有錯誤(雖然它們看起來很正確)。回溯顯示哪一條線? – 2010-05-04 10:40:47

+0

我不知道這是服務器級錯誤。有自己的登錄系統。 – Ockonal 2010-05-04 10:43:13

+1

無重放。沒有回溯,甚至無法查看它是否是導致錯誤的特定功能 – SilentGhost 2010-05-04 10:45:25

回答

17

您的代碼將失敗。 (expr)相當於expr(expr,)相當於一個元素元組,其持有expr作爲第一個元素。因此,請嘗試在第二個print聲明中的self.turnnow之後添加逗號。

4

編輯:無視這個答案,它不可能是問題。保持評論。

嘗試,如果與

(self.turnnow,) 

幫助(即增加一個尾隨逗號)替換

(self.turnnow) 

。現在,它不是一個元組和parens只是裝飾。可能不是這樣,因爲你沒有提供行號 - 必須猜測。

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

這是因爲Python中的括號表達式不自動成爲一個元組如果元組將只有一個元素:如果self.turnnow是一個空的元組

+0

在單個參數的情況下,它不必是一個元組。 – SilentGhost 2010-05-04 10:46:51

+0

@SilentGhost:對,但是如果'self.turnnow'本身就是一個元組,那麼會出現問題。但是,想一想,這將更有可能是「額外的論據」。 – doublep 2010-05-04 10:50:25

相關問題