Недостаточно аргументов для строки формата - PullRequest
13 голосов
/ 04 мая 2010

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

18 голосов
/ 04 мая 2010

Ваш код потерпит неудачу, если 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.

4 голосов
/ 04 мая 2010

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

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

(self.turnnow)

с

(self.turnnow,)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...