2016-11-26 90 views
3

是否有自動化的方式來測試代碼是否兼容Python 2和Python 3?我已經看到很多關於如何編寫與兩者兼容的代碼的文檔,但沒有關於自動檢查的文檔。基本上一種版本之間的兼容性,而不是語法/風格。檢查代碼是否與Python 2和3兼容

我想過要麼用兩個解釋器運行測試,要麼運行一個工具,如six2to3並檢查沒有輸出;不幸的是,前者要求你對測試有100%的覆蓋率,並且我認爲後者要求你有有效的Python 2代碼,並且只會選擇與Python 3兼容的問題。

是否有任何東西在那裏將完成這項任務?

+0

嘗試使用[pylint](https://pypi.python.org/pypi/pylint)和'--py3k'標誌。 –

回答

3

除了在兩個版本上運行代碼並發現不一致之外,沒有「防止欺騙」的方法。隨着中說,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

1

難道你不看2to3的輸出,看看是否有必要更改代碼?

+1

我想到了這個解決方案,但是這不需要「定位「蟒蛇2?例如,如果我使用了'print'text'',那麼2to3會捕獲它,但是如果我使用python 3獨佔的東西,比如'raise Exception()。with_traceback()'會2to3捕獲應該更改爲使用Python 2? – danielunderwood

相關問題