2010-06-14 25 views
5

我使用Python 3.x中的新打印,並且觀察到由於end=' '導致下面的代碼不會編譯如何編寫一個Python 2.6+的腳本,用老的Python正常失敗?

from __future__ import print_function 

import sys 
if sys.hexversion < 0x02060000: 
    raise Exception("py too old") 

... 
print("x",end=" ") # fails to compile with py24 

如何繼續使用新的語法,但使腳本很好地失敗?是否必須調用另一個腳本並且在這個腳本中只使用安全語法?

+2

如果我們能夠及時發送一個人,我們可能會說服Guido添加一個很好的編譯指令「__minimum_python_version __(2,0)」 – 2010-07-09 20:40:16

回答

2

這個question here有一些建議,但它看起來不容易。你將不得不創建一個包裝腳本。

2

一種方法是使用python 2.x打印語句編寫模塊,然後當您想將其移植到python 3中時,使用2to3腳本。我認爲還有用於3to2轉換的腳本,雖然它們似乎不如2to3成熟。無論哪種方式,在biggers腳本中,您應該始終將領域邏輯和輸入/輸出分開;這樣,所有的打印語句/函數都集中在一個文件中。對於日誌記錄,您應該使用日誌記錄模塊。

+2

整個想法是編寫Python 3準備好的代碼,可以使用2.6+ python而不是打算在未來做切換。 – sorin 2010-06-14 13:59:02

8

爲Python 2.6最簡單的方法就是加入這樣一行:在文件開始

b'You need Python 2.6 or later.' 

。這利用了字節文字是在2.6中引入的事實,因此任何早期版本都會使用您提供的任何消息作爲堆棧跟蹤來提升SyntaxError