2011-03-31 52 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+