格式化对象不是映射¶
ID: py/percent-format/not-mapping
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- reliability
- correctness
Query suites:
- python-security-and-quality.qls
如果格式字符串包含 %(name)s
形式的转换说明符,那么操作的右侧必须是映射。如果字符串出现在模运算符 (%
) 的左侧,右侧是待格式化的值,则它是一个格式字符串。如果右侧不是映射,则会引发 TypeError
。映射通常是 dict
,但可以是任何实现映射协议的类型。
建议¶
更改格式以匹配参数,并确保右侧始终是映射。
示例¶
在以下示例中,格式化操作的右侧可以是 tuple
,它不是映射。要修复此示例,请确保 unlike_condition
发生时,args
是一个映射。
def unsafe_format():
if unlikely_condition():
args = (1,2,3)
else:
args = {a:1,b:2,c:3}
return "%(a)s %(b)s %(c)s" % args
参考¶
Python 库参考:字符串格式化.