检查代码是否与Python 2和3兼容

检查代码是否与Python 2和3兼容

问题描述:

是否有自动化的方式来测试代码是否兼容Python 2和Python 3?我已经看到很多关于如何编写与两者兼容的代码的文档,但没有关于自动检查的文档。基本上一种版本之间的兼容性,而不是语法/风格。检查代码是否与Python 2和3兼容

我想过要么用两个解释器运行测试,要么运行一个工具,如six2to3并检查没有输出;不幸的是,前者要求你对测试有100%的覆盖率,并且我认为后者要求你有有效的Python 2代码,并且只会选择与Python 3兼容的问题。

是否有任何东西在那里将完成这项任务?

+0

尝试使用[pylint](https://pypi.python.org/pypi/pylint)和'--py3k'标志。 –

除了在两个版本上运行代码并发现不一致之外,没有“防止欺骗”的方法。随着中说,CPython2.7-3标志,它(根据man页)说:

发出警告的Python 3.x的不兼容问题2to3的不平凡修复。

至于你有有效的python3代码的情况下,你想要将其backport到python2.x - 你可能实际上并不想这样做。 python3.x是未来。在一般情况下,这可能是一个非常痛苦的问题。开始使用python3.x的很多原因是因为您可以访问各种酷炫的新功能。试图重新编写已经依赖于新功能的代码通常会非常困难。尝试升级python2.x软件包以使用python3.x比做其他事情要好得多。

+1

部署仅在python 3上运行的代码是否可行,或者很可能有许多潜在用户只能使用python 2? – danielunderwood

+0

当然有_are_库这样做。我认为这真的取决于你的观众。但是,如果你从头开始写东西,那么你可以做出决定 - 仅支持python2.x,支持python2.x和python3.x并支持python3.x。在前两种情况下,那么你提出的'2to3'路由就可以工作(只要你不需要像'async'这样的花式python3.x功能)... – mgilson

难道你不看2to3的输出,看看是否有必要更改代码?

+1

我想到了这个解决方案,但是这不需要“定位“蟒蛇2?例如,如果我使用了'print'text'',那么2to3会捕获它,但是如果我使用python 3独占的东西,比如'raise Exception()。with_traceback()'会2to3捕获应该更改为使用Python 2? – danielunderwood