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