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

标签 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 是否被使用,如果有,打印一些友好的内容然后退出?

最佳答案

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

关于python 2代码: if python 3 then sys.退出(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277721/

相关文章:

python - 绘制线条时奇怪的 matplotlib 颜色问题

Python 3 数据类初始化

Python如何使 ping -t 脚本无限循环

python - Python 3.x 中新的 print 函数相对于 Python 2 的 print 语句有什么优势?

python - 在 python 2.x 中,我应该调用 object.__del__ 吗?

sqlite - 在运行子进程时按 Ctrl+C 终止 Python 程序

python - PySpark - 如何根据坐标矩阵中表示的相似性获取 top-k id?

python - SQLAlchemy:在关系()上使用 like()

python - 如何获取 date_range 并将它们作为 'list' 插入到数据框中的新列?

python - 为什么 `print(object)` 显示 `<__main__. object at 0x02C08790>` ?