Python格式化错误(不支持)
我正在用这个方法构建一个字符串。
但是不知道为什么,我遇到了以下错误:
ValueError: unsupported format character ''' (0x27) at index 38
我完全不知道这个错误是从哪里来的。我检查过拼写错误,但没有发现任何问题。
s = "SELECT %s FROM %s "
data = [colName, tableName]
if whereRoughly:
s+= "(WHERE "
for i in range(len(whereRoughly[0])):
s += "%s LIKE '%%s%' "
if i+1 < len(whereRoughly[0]): s += "OR "
data.append(whereRoughly[0][i])
data.append(whereRoughly[1])
s+= ")"
s += "ORDER BY %s;"
data.append("desc")
print s
print data
print s % tuple(data)
这里是我调用上面所有代码的地方。
s.makeSelect(tableName="students", whereRoughly=([1,2], "Wes"))
这是实际的输出结果:
SELECT %s FROM %s (WHERE %s LIKE '%%s%' OR %s LIKE '%%s%' )ORDER BY %s;
['*', 'students', 1, 'Wes', 2, 'Wes', 'desc']
1 个回答
1
问题出在这里:
"'%%s%'"
没有格式代码 %'
,如果尝试使用它会导致错误。
>>> "'%%s%'" % "foo"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unsupported format character ''' (0x27) at index 5
我猜你是想用 SQL 的 LIKE
语法,比如 '%foo%'
(两边都用 %
和单引号包裹)。
如果想用 Python 的旧式 %
格式来实现这个格式,你需要像这样转义开头和结尾的百分号:
>>> "'%%%s%%'" % "foo"
"'%foo%'"
(可以查看 文档.)
用现代风格的 string.format
来做会更简洁:
>>> "'%{0}%'".format('foo')
"'%foo%'"
(另外,上面提到的不要用 +=
来拼接字符串的建议也是对的——更推荐使用 format
和 join
)。