【问题标题】:Code changes from Python 2.6 to 3.x从 Python 2.6 到 3.x 的代码更改
【发布时间】:2011-03-31 07:53:49
【问题描述】:

我正在尝试让pywbem 在 Python 3.2 中工作(它在 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 的经验。

PS:我已经对 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")

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    这不是宏,而是函数定义,在 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/ 它有一个不错的教程。

    【讨论】:

      【解决方案2】:

      python 3 中最明显的变化之一是 print 不再是语句,而是一个函数,因此您必须使用括号来调用该函数。 print(s)

      另外,如果您有 Python2 代码,只需使用 2to3,它可以将您的 python2 转换为 python3 的源代码到源代码,它可以为您修复大部分语法级别更改,例如上述问题。 2to3 安装了 python3 二进制文件。

      【讨论】:

      • 2to3 并不能解决所有问题,我为此提出了一个新问题:stackoverflow.com/questions/5497013/…
      • 它将拾取所有源到源的翻译事情,这涉及到语法的变化。 2to3 失败的地方是在 Python3 中处理 Unicode 字符串与最初在 Python2 中处理 8 位字符串的情况。 diveintopython3.org 是了解这些的好来源。也回答了你的其他问题。
      【解决方案3】:

      很抱歉回答了一个老问题,但我最近只是想让 PyWBEM 在 Python 3 下运行,所以我分叉了它,进行了所需的更改,并从中删除了 Python 2.x 依赖项 (M2Crypto) 用于 3.x 。 x 系列。以下是来自 GitHub 的源代码:

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

      快速说明,这支持 Python 2.6、2.7 和 3.4+

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        相关资源
        最近更新 更多