Имеет смысл, что это работает, потому что оператор вроде этого:
'some value goes here %s' % value
Фактически возвращает строку.Вероятно, более логично смотреть на это так:
result = ("%s limit 1" % sql) % table
В этом нет ничего особенного, но операторы цепочки могут привести к проблемам с выяснением, откуда возникла ошибка.
Так, например, это работает нормально:
>>> sql = 'a value of %s'
>>> x = 'some string %s with stuff'
>>> y = 'VALUE'
>>> x % sql % y
'some string a value of VALUE with stuff'
Но если там была ошибка форматирования (я понимаю, что этот пример патологичен, но он все понял):
>>> sql = 'a value of %d'
>>> x = 'some string %d with stuff'
>>> y = 123
>>> x % sql % y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
Не совсем понятно, какая %d
вызывает вашу ошибку.По этой причине я бы разделил его и просто использовал один форматер %
на строку, если это возможно, потому что тогда трассировка сможет указать вам, какая именно строка и какой форматтер имели проблему.
Длязапишите, выполнив один форматер на строку, вы также значительно упростите жизнь тем, кто читает ваш код и пытается выяснить, что происходит.