Недостаточно аргументов для строки формата
У меня такой код в 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 />")
И ошибка в заголовке этого сообщения. Что не так?
Ответы
Ответ 1
Ваш код не будет работать, если 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
в качестве первого элемента. Итак, попробуйте добавить запятую после self.turnnow
во второй оператор print
.
Ответ 2
EDIT: проигнорируйте этот ответ, это не может быть проблемой. Сохранение комментариев.
Попробуйте заменить
(self.turnnow)
с
(self.turnnow,)
помогает (т.е. добавляет конечную запятую). То, как сейчас, что кортеж и парнеры просто декоративны. Возможно, это не так, поскольку вы не указали номер строки - должны угадать.