整数除法的结果可能会被截断¶
ID: py/truncated-division
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- correctness
Query suites:
- python-security-and-quality.qls
在 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".