Here's the output. These are utf-8 strings I believe... some of these can be NoneType but it fails immediately, before ones like that...
instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl
TypeError: not enough arguments for format string
Its 7 for 7 though?
5 Answers
You need to put the format arguments into a tuple (add parentheses):
instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl)
What you currently have is equivalent to the following:
intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl
Example:
>>> "%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'
Note that the % syntax for formatting strings is becoming outdated. If your version of Python supports it, you should write:
instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl)
This also fixes the error that you happened to have.
I got the same error when using % as a percent character in my format string. The solution to this is to double up the %%.
I had the same issue I was using a raw query for a specific reason and this was to add double quotes in TIME_FORMAT function.
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')
def process_item(self, item, spider):
sql = "insert into fd(province,pici,subject,maxscore,midscore,minscore,zy,school) values('%s', '%s','%s'," \
"'%s','%s','%s','%s','%s','%s')"
data = (item['province'],item['pici'],item['subject'],item['maxscore'],item['midscore'],item['minscore'],item['zy'],item['school'])
self.cursor.execute(sql % data)