检测 python 中的整数除法

Detecting integer division in python

我必须完成 Python 2 到 3 跳。整数除法是唯一让我害怕的东西。我们的test suite是可以的,但是不一定要设置审查师。是否有某种包装器或环境或 hack,我可以从中 运行 脚本来检测何时使用整数除法?我主要在 Windows.

上使用 Anaconda Python 2.7

您可以 运行 您的代码使用 python 2 引擎但使用 -3 开关:

L:\>Python27_X64\python.exe -3 test.py
test.py:1: DeprecationWarning: classic int division
  i = 2/3

如果您希望在 python 2 或 3 中有相同的行为,请使用

from __future__ import division

在每个模块的开始你 运行ning:现在除法是浮动的,除非你使用 //

这是一个 run-time 选项而不是静态选项,因此您需要很好地覆盖您的代码以捕获它们。例如,它没有检测到该代码上的任何内容:

if False:
    i = 2/3

-3 开关还将检测其他不兼容性(不是全部)而不会中断,因此您可以一次修复它们。

除此之外,除法并不是最难的问题。字符串 vs 字节位很烦人。考虑一下:

with open("toto.txt","wb") as f:
    f.write("foo")

这在 Python 3 中无效(字符串不能写入二进制流),-3 脚本检测不到。