43

我有一大段仅限 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,如果是这样,打印一些友好的东西然后退出?

4

1 回答 1

72

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 代码。

于 2012-06-30T21:20:56.043 回答