CodeQL 文档

整数除法的结果可能会被截断

ID: py/truncated-division
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - maintainability
   - correctness
Query suites:
   - python-security-and-quality.qls

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

在 Python 2 中,两个整数相除的结果会被静默地截断为整数。这可能导致意外行为。

建议

如果除法不应该被截断,请在文件开头添加 from __future__ import division。如果除法应该始终被截断,请将除法运算符 / 替换为截断除法运算符 //

示例

第一个示例展示了一个用于计算数字序列平均值的函数。当函数在 Python 2 下运行,并且序列只包含整数时,可能会返回不正确的结果,因为结果被截断了。第二个示例通过遵循上面列出的建议来纠正此错误。

# Incorrect:

def average(l):
    return sum(l) / len(l)

print average([1.0, 2.0])  # Prints "1.5".
print average([1, 2])      # Prints "1", which is incorrect.
# Correct:
from __future__ import division

def average(l):
    return sum(l) / len(l)

print average([1.0, 2.0])  # Prints "1.5".
print average([1, 2])      # Prints "1.5".

参考

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