如何编写一个在旧版Python下优雅失败的Python 2.6+脚本?

5 投票
3 回答
988 浏览
提问于 2025-04-15 23:56

我在使用Python 3.x的新打印功能时,发现下面的代码因为end=' '的原因无法编译

from __future__ import print_function

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

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

我该如何继续使用这种新语法,同时让脚本出错时表现得更友好呢?是不是必须调用另一个脚本,只在这个脚本中使用安全的语法?

3 个回答

2

一种方法是用 Python 2.x 的打印语句来编写你的模块,然后当你想把它转移到 Python 3 时,可以使用 2to3 脚本。我觉得也有 3to2 的转换脚本,不过它们似乎没有 2to3 那么成熟。

无论哪种方式,在较大的脚本中,你应该始终把业务逻辑和输入/输出分开;这样,所有的打印语句或函数就可以集中在一个文件里。对于记录日志,你应该使用 logging 模块。

8

在Python 2.6中,简单的方法就是在文件开头加上一行代码,比如:

b'You need Python 2.6 or later.'

这样做的原因是,Python 2.6引入了字节字面量(byte literals),而在更早的版本中,如果你写了这行代码,就会出现一个SyntaxError错误,并且错误信息会显示在堆栈跟踪中。

2

在这个问题中有一些建议,但看起来这并不是很简单。你需要写一个包装脚本。

撰写回答