Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:格式字符串的参数不足_Python_String_Format_Typeerror - Fatal编程技术网

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

Python TypeError:格式字符串的参数不足,python,string,format,typeerror,Python,String,Format,Typeerror,这是输出。我相信这些是utf-8字符串。。。其中一些可以是非类型的,但它会立即失败,在像这样的失败之前 instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl TypeError:格式字符串的参数不足 但是7代表7?您需要将格式参数放入元组(添加括号): 您目前拥有的相当于以下内容: intstr =

这是输出。我相信这些是utf-8字符串。。。其中一些可以是非类型的,但它会立即失败,在像这样的失败之前

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl
TypeError:格式字符串的参数不足


但是7代表7?

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

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

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'
>>“%s%s”%“你好”,“世界”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:格式字符串的参数不足
>>>“%s%s”%(“你好”,“世界”)
“你好,世界”

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

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

这也修复了您碰巧遇到的错误。

在格式字符串中将
%
用作百分比字符时,我遇到了相同的错误。解决方法是将
%%

加倍。出于特定原因,我在使用原始查询时遇到了同样的问题,这就是在TIME\u格式函数中添加双引号

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')

有点奏效了。我试图使用%s格式来避免非类型错误,但我仍然得到了它。相关:考虑到年龄,对OP没有用处,但以防万一对某人仍然有用:一个简单的解决方法是使用三元语句来防止变量可能为“无”,即“%s%s”%(a如果a不是“无”,b)如果我们担心a可能为“无”。因此,即使a是None,我们仍然没有将None传递给format操作符并导致问题。这是否也适用于日志模块?它能理解这种插值吗?@joshsvoss:是的,这里提到了一些讨论可能性的链接:@SimeonVisser,为什么它会过时?例如,如果您使用一个变量来存储格式字符串,并且希望将带有替换值的字符串放在同一个变量中,那么只会得到一个稍微干净一点的代码,格式为\u string%=('bla','bla','bla')。是否需要详细说明或指向一些有用的链接?此外,format()支持更明确的方式来表达所发生的事情,例如“{a}{b}”.format(a='3',b='4')。我使用的是python 3.6.5,仍然可以使用百分号运算符……提供一些代码示例,说明解决方案如何工作,以及没有它如何失败,等等。可能会很有用。看见请注意,这是一个有5年历史的问题,因此只有当它提供的信息远远超过已有的信息时,您才应该添加一个答案。由于键入错误,我得到了此错误的变体:
“foo:%(foo)s,bar:s(bar)%baz:%(baz)s”%%{“foo”:“foo”,“bar:“bar”,“baz:“baz”}
对于python3,此“解决方案”是错误的->无效语法
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')