2011-03-31 68 views
0

我試圖讓pywbem在Python 3.2的工作(它在2.6正常工作),但是,這部分代碼在mof_compiler.py構建失敗:代碼更改到3.x

File "pywbem-0.7.0\mof_compiler.py", line 1341 
    print s 
     ^
SyntaxError: invalid syntax 

這是一個宏,定義如下:

def _print_logger(s): 
    print s 

我不明白爲什麼這是無效的,請解釋如何在Python 3.2中做同樣的事情。

注意:我很少或沒有使用Python的經驗。

PS:我已經做了一些小的改動代碼爲3.2像 基於倫納特Regebro的答案在這裏改變

except CIMError, ce: 

except CIMError as ce: 

是我發現了一些其他變化(將他們在這裏,因爲它可能對其他人有用)。

exec "import %s as lextab" % tabfile -> exec ("import %s as lextab" % tabfile) 
raise ValueError,"Expected a string" -> raise ValueError("Expected a string") 

回答

6

這不是一個宏,它是一個函數定義,在Python 3中,print語句現在是一個函數。改爲print(s)

Python 2和Python 3之間的變化列表如下:http://docs.python.org/release/3.0.1/whatsnew/3.0.html 閱讀起來並不是那麼容易,但我不知道是否有更好的在線書籍(儘管存在書籍)。

如果你打算使用Python 3,你可能會做得很好,以獲得一個Python 3的書。現在有一些他們。或者至少參考Python 3文檔:http://docs.python.org/release/3.2/它有一個體面的教程。

+0

感謝您的解釋! – Remko 2011-03-31 08:05:05

2

python 3中最明顯的變化之一是print不再是語句,而是一個函數,所以你必須使用括號來調用該函數。另外,如果你有你的Python2代碼,只需使用2to3,它可以將你的python2的源代碼轉換爲python3,它可以像上述問題那樣修復大部分語法級別的變化。 2to3使用python3二進制文件安裝。

+0

+1 2to3工具! – Remko 2011-03-31 08:15:24

+0

2to3不拾取的一切,我提出了一個新的問題:http://stackoverflow.com/questions/5497013/convert-code-from-python-2-x-to-3-x – Remko 2011-03-31 08:21:10

+0

它會拿起所有源到源翻譯的東西,其中涉及語法的變化。在2to3將失敗的情況下,處理Python3中的Unicode字符串與最初在Python2中處理8位字符串的情況。 http://www.diveintopython3.org是瞭解這些的一個很好的來源。也回答了你的其他問題。 – 2011-03-31 08:27:24

0

對不起回答了一個老問題,但我最近想讓PyWBEM在Python 3下運行,所以我分叉了它,做了必要的更改,並從中爲它移除了Python 2.x依賴項(M2Crypto) .x系列。下面是從GitHub來源:

https://github.com/deejross/python3-pywbem

快速注意到,這個支持Python 2.6,2.7,和3.4+