2013-12-17 58 views
0

我目前正在python 3.3上編寫一些代碼。不幸的是,我所依賴的一些插件還不能與Python3兼容,我需要切換回Python2.7。在代碼中添加條件取決於python版本

爲了避免重構所有的代碼,我想這樣做

if(os.python.version<3.0): 
from _future_ import print, super 

什麼是做這個

+3

http://stackoverflow.com/questions/446052/python-best-way-to-check-for-python-version-in-a-program-that-uses-new-language –

+0

你可以使用'from __future__無條件導入print_function',但很多更改沒有簡單的將來導入來解決它們。移植你的程序需要更多的工作。 – user2357112

回答

4

你是在錯誤的軌道上這裏的適當的方式,在幾個計數。首先,不要檢查版本,檢查功能。在他的評論中,你可以很好地解釋這一點。

第二,如果你沒有檢查版本,即使有沒有多的拼寫錯誤,這不會在所有的工作:

if(os.python.version<3.0): 
    from _future_ import print, super 

一個__future__語句可以由前面只有模塊docstring,空白行,註釋行和其他__future__語句。它不能出現在其他地方 - 如果你嘗試,你會得到一個語法錯誤。第三,對於你給的例子,檢查任何東西都是毫無意義的。在文件頂部附近,

from __future__ import print_function 

在Python 2.7和Python 3中都很好。在Python 3中,它沒有任何效果。

+1

[它們也可以在模塊docstring之前。](http://docs.python.org/2/reference/simple_stmts.html#future-statements) – user2357112

+0

謝謝!編輯補充說。模塊可以有文檔?大聲笑;-) –

+0

謝謝,這解決了我的問題。 – chiffa

0

正如zhangyangyu所說,你可以通過sys.version_info來獲取當前的python版本。

sys.version_info是元組,我總是用前三個元素版本比較是這樣的:

if sys.version_info[:3] > (3,0): 
    do something 
elif sys.version_info[:3] > (2,5,2): 
    do something else 

或者,你可以使用distutils.version當前的版本與指定的版本比較。

Here是關於如何使用distutils.version的答案。