Python格式化错误(不支持)

0 投票
1 回答
2169 浏览
提问于 2025-04-18 05:00

我正在用这个方法构建一个字符串。

但是不知道为什么,我遇到了以下错误:

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%'"

(另外,上面提到的不要用 += 来拼接字符串的建议也是对的——更推荐使用 formatjoin)。

撰写回答