源碼至少應當附帶一個README或類似的東西吧。如果連這個都沒有的話,我也不認為這個代碼有什麼研究的價值。


不能跑一遍試試嗎。。。2和3有些不兼容而已不是全部不兼容。如果想看代碼判斷,我想到的比較通用的只有print,2裏是不需要括弧的,3裏print是函數,必須帶括弧。另外2裏習慣在開頭加編碼格式,3貌似是沒必要加的。


不兼容往往有幾種情況。

一是語法上的不兼容,比如print,比如Python3.6中的async/await就不能在之前的解釋器中運行。這種問題是靜態的,可以被解釋器或者文本檢查工具發現。一是語義或者說代碼的意義的改變,比如Python3.6中字典是有序的,有人利用了這個特性,自然在之前的環境中執行就無法達到目的。這種錯誤解釋器是不會報錯的,這就像你依賴的某個包的API更改了,你不知道,仍然像以前那樣使用,就有可能無法實現目的。這種情況只有通過人工檢查找出問題,或者編寫測試,找出不正常的部分。

從使用者的角度看,當你不知道他的環境是什麼版本時,最簡單的方法就是分別在Python2和Python3的環境中運行一遍,沒有報錯就是可運行的。但是這會產生一個問題,Python代碼是解釋執行的,當你不去調用一段代碼時,它是不會被執行的。這樣即使有不兼容的地方,也不見得就會報錯。這種情況下,你可以使用代碼覆蓋率測試工具,找到程序運行時沒有執行的代碼,人工檢查是否兼容。

人工檢查也是一個方法。對於一段較短的代碼,熟悉Python的人可以充當人肉解釋器,找出不兼容的地方。不過對於大的項目就不太實際。
查找print語句,一般Python3的print後面會有(),而Python2一般不帶括弧。
看一下Python官方的說明,有一些PEP也會提到。類,對象這些也區別,繼承順序(樹結構)好像也有細微不同,具體的細節記不清了。當然,直接從代碼看也可以,只是瞭解不到背後的機制而已。

import sys

print(sys.version)


推薦閱讀:
相關文章