python 2代码:if python 3 then sys.exit()

时间:2012-06-30 21:14:17

标签: python python-3.x python-2.x

我只有一大段Python 2代码。它想在开始时检查Python 3,如果使用python3则退出。所以我试过了:

import sys

if sys.version_info >= (3,0):
    print("Sorry, requires Python 2.x, not Python 3.x")
    sys.exit(1)

print "Here comes a lot of pure Python 2.x stuff ..."
### a lot of python2 code, not just print statements follows

但是,退出不会发生。输出是:

$ python3 testing.py 
  File "testing.py", line 8
        print "Here comes a lot of pure Python 2.x stuff ..."
                                                        ^
SyntaxError: invalid syntax

因此,看起来python会在执行任何内容之前检查整个代码,从而导致错误。

有没有一种很好的方法让python2代码检查正在使用的python3,如果是这样打印一些友好的东西然后退出?

1 个答案:

答案 0 :(得分:63)

Python会在开始执行之前对源文件进行字节编译。整个文件必须至少解析,否则您将获得SyntaxError

解决问题的最简单方法是编写一个小包装器,解析为Python 2.x和3.x.例如:

import sys
if sys.version_info >= (3, 0):
    sys.stdout.write("Sorry, requires Python 2.x, not Python 3.x\n")
    sys.exit(1)

import the_real_thing
if __name__ == "__main__":
    the_real_thing.main()

语句import the_real_thing只会在 if语句之后执行,因此此模块中的代码不需要解析为Python 3.x代码。