如何编写一个在旧版Python下优雅失败的Python 2.6+脚本?
我在使用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
在这个问题中有一些建议,但看起来这并不是很简单。你需要写一个包装脚本。