CodeQL 文档

格式化对象不是映射

ID: py/percent-format/not-mapping
Kind: problem
Security severity: 
Severity: error
Precision: high
Tags:
   - reliability
   - correctness
Query suites:
   - python-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

如果格式字符串包含 %(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

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私