首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python 3:语法分析前检查版本

Python 3:语法分析前检查版本
EN

Stack Overflow用户
提问于 2014-02-10 02:29:00
回答 2查看 224关注 0票数 1

在解析整个文件之前,我想检查一下我的解释器是否使用Python 3来打印一个像样的错误消息。

this question中,有一个关于Python2.4/ 2.5的答案。但是,当我试图在Python2.7/ 3.3环境中再现解决方案时,它没有工作。

例如,运行以下文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try:
  eval("print('', end='')")
except SyntaxError:
  raise Exception("python 3 needed")

print("", end="")

结果出现以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
File "test_version.py", line 6
  print("", end="")
             ^
SyntaxError: invalid syntax

也就是说,eval的计算速度不够快,无法阻止解析器到达第6行。

还有另一种可能在这里奏效的黑客吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 02:33:42

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

在哪个模块中调用print()函数并不重要,这是一个语法错误,因为您没有使用print作为语句。您可以将其放在测试后导入的单独模块中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try:
    eval("print('', end='')")
except SyntaxError:
    raise Exception("python 3 needed")

import real_script_using_print_function

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from __future__ import print_function

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-10 08:38:57

检查运行脚本的Python版本的经典方法是使用sys.version_info (http://docs.python.org/2/library/sys.html)返回的元组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

通过从print()导入__future__来启用print函数的原因是,如果使用print语句,脚本将不会在Python3.x下进行解析。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21674621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文