从Python 2.6到3.x的代码变更

0 投票
3 回答
3060 浏览
提问于 2025-04-16 14:47

我正在尝试在Python 3.2中使用pywbem(在2.6中运行得很好),但是在mof_compiler.py的这部分代码上构建失败:

  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几乎没有经验。

附言:我已经对代码做了一些小改动以适应3.2,比如将

except CIMError, ce:

改为

except CIMError as ce:

根据Lennart Regebro的回答,我发现了一些其他的改动(放在这里可能对其他人有用)。

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

3 个回答

0

抱歉回复一个旧问题,但我最近想在Python 3上运行PyWBEM,所以我对它进行了分支,做了一些必要的修改,并去掉了一个Python 2.x的依赖(M2Crypto),让它可以在3.x系列上使用。这里是来自GitHub的源代码:

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

顺便提一下,这个版本支持Python 2.6、2.7和3.4以上的版本。

3

在Python 3中,最明显的变化之一就是打印内容的方式不再是一个简单的语句,而是变成了一个函数。这意味着你在使用打印功能时,需要加上括号,比如这样:print(s)

如果你有Python 2的代码,可以使用2to3工具,它可以帮助你把Python 2的代码转换成Python 3的代码。这工具可以自动修复大部分语法上的问题,比如上面提到的那些变化。2to3工具是和Python 3一起安装的。

6

这不是宏,而是一个函数定义。在Python 3中,打印语句现在变成了一个函数。所以你应该用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/,里面有不错的教程。

撰写回答