格式字符串参数不足

13 投票
2 回答
30984 浏览
提问于 2025-04-15 22:20

我在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 个回答

4

编辑:忽略这个回答,这不是问题所在。保留评论。

试试看把

(self.turnnow)

换成

(self.turnnow,)

是否有帮助(也就是在最后加一个逗号)。现在的写法不是一个元组,括号只是装饰而已。因为你没有提供行号,所以我只能猜。

18

如果 self.turnnow 是一个空的元组,你的代码就会出错:

>>> 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中,如果一个括号里的表达式只有一个元素,它并不会自动变成元组。比如 (expr) 实际上和 expr 是一样的。而 (expr, ) 则表示一个包含 expr 作为第一个元素的单元素元组。所以,试着在第二个 print 语句中的 self.turnnow 后面加一个逗号。

撰写回答