Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:在语法分析之前检查版本_Python_Python 2.7_Python 3.x - Fatal编程技术网

Python3:在语法分析之前检查版本

Python3:在语法分析之前检查版本,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,在解析整个文件之前,我想检查我的解释器是否使用Python3来打印一条合适的错误消息,否则 在中,有一个关于Python 2.4/2.5的答案。然而,当我试图在Python2.7/3.3环境中重现该解决方案时,它不起作用 例如,运行以下文件: try: eval("print('', end='')") except SyntaxError: raise Exception("python 3 needed") print("", end="") 导致以下错误: File "test

在解析整个文件之前,我想检查我的解释器是否使用Python3来打印一条合适的错误消息,否则

在中,有一个关于Python 2.4/2.5的答案。然而,当我试图在Python2.7/3.3环境中重现该解决方案时,它不起作用

例如,运行以下文件:

try:
  eval("print('', end='')")
except SyntaxError:
  raise Exception("python 3 needed")

print("", end="")
导致以下错误:

File "test_version.py", line 6
  print("", end="")
             ^
SyntaxError: invalid syntax
也就是说,
eval
的计算速度不够快,无法阻止解析器到达第6行


这里还有其他可能的破解方法吗?

使用
print()
将代码作为一个函数移动到一个单独的模块中,并使主脚本只进行测试

无论在模块中的何处执行
print()
函数调用,这都是一个语法错误,因为您没有将
print
用作语句。你应该把它放在测试后导入的单独模块中

try:
    eval("print('', end='')")
except SyntaxError:
    raise Exception("python 3 needed")

import real_script_using_print_function
但是,在Python 2中,您还可以添加:

from __future__ import print_function

在顶部,使
print()
也能在Python 2中工作。如果小心的话,编写同时在Python 2和Python 3上运行的Python代码是完全可行的。

检查运行脚本的Python版本的经典方法是使用sys.version_info()返回的元组:

from\uuuuu future\uuuuu导入打印功能
导入系统
如果系统版本信息[0]<3:
打印(“此程序需要Python 3.2版或更高版本”)
系统出口(1)

通过从
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu导入将
print()
作为函数启用的原因是,如果使用
print
语句,脚本将无法在Python3.x下进行解析。

此处发布的代码也无法在Python2.4或2.5上运行;您正在使用
print()
作为代码中的函数,因此编译器仍将抛出异常。将
print()
use移出此模块,移动到一个单独的模块中。我需要的正是
from\uuuuuu future\uuuuu导入print\u函数。我无法添加另一个“主”文件来替换当前文件,但我可以添加导入,然后测试版本,不会出现错误。您能解释一下您的答案吗?@EvertonAgner使用
sys。version\u info
将为您提供有关您正在使用的Python版本的信息。这是您如何确定您是否正在使用所需的版本的方法-作为一般提示。
from __future__ import print_function
import sys
if sys.version_info[0] < 3:
    print("This program needs Python version 3.2 or later")
    sys.exit(1)