检测 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
脚本检测不到。
我必须完成 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
脚本检测不到。