Недостаточно аргументов в пользу строки формата

У меня есть такой код в 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 />")

И ошибка находится в заголовке этого сообщения. Что случилось?

13
задан Max Frai 4 May 2010 в 10:36
поделиться

2 ответа

Ваш код завершится ошибкой, если 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 .

18
ответ дан 1 December 2019 в 22:22
поделиться

РЕДАКТИРОВАТЬ: Не обращайте внимания на этот ответ, это не может быть проблемой. Сохраняем комментарии.

Попробуйте заменить

(self.turnnow)

на

(self.turnnow,)

(т.е. добавить запятую в конце). Теперь это не кортеж, а скобки просто декоративные. Возможно, это не так, поскольку вы не указали номер строки - нужно угадывать.

4
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: