Python TypeError:格式字符串的参数不够

时间:2012-06-21 20:25:25

标签: python string format typeerror

这是输出。这些是utf-8字符串我相信......其中一些可以是NoneType但它会立即失败,在那之前......

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl

TypeError:格式字符串

的参数不足

7比7但是?

4 个答案:

答案 0 :(得分:213)

您需要将格式参数放入元组(添加括号):

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl)

您目前拥有的内容相当于以下内容:

intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl

示例:

>>> "%s %s" % 'hello', 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> "%s %s" % ('hello', 'world')
'hello world'

答案 1 :(得分:148)

请注意,格式化字符串的%语法正在变得过时。如果您的Python版本支持它,您应该写:

instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl)

这也解决了你碰巧遇到的错误。

答案 2 :(得分:9)

在我的格式字符串中使用%作为百分比字符时出现了同样的错误。解决方法是将%%加倍。

答案 3 :(得分:0)

由于特定原因,我在使用 raw 查询时遇到了同样的问题,这是在 TIME_FORMAT 函数中添加双引号。

User.objects.raw(
            f'SELECT f1,f2,TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time))),"%%H:%%i") AS log FROM users GROUP BY start_dt')