如何在使用新语言功能的程序中检查Python版本?

2024-04-25 22:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个Python脚本,它至少需要 Python的版本,正确的失败方式是什么 何时使用早期版本的Python启动脚本?

如何尽早获得控制权以发出错误消息 然后离开?

例如,我有一个程序使用ternery运算符(2.5中的新增)和“with”块 (2.6新增)。我写了一个简单的翻译版本 checker例程,这是脚本要做的第一件事 呼叫。。。只是没走那么远。取而代之的是 在python编译期间,在我的例程之前,脚本失败 甚至被称为。因此脚本的用户可以看到 模糊的synax错误回溯-这几乎需要 一位专家推断这只是跑步 Python的错误版本。

我知道如何检查Python的版本。问题是有些语法在旧版本的Python中是非法的。考虑一下这个计划:

import sys
if sys.version_info < (2, 4):
    raise "must use python 2.5 or greater"
else:
    # syntax error in 2.4, ok in 2.5
    x = 1 if True else 2
    print x

当在2.4下运行时,我想要这个结果

$ ~/bin/python2.4 tern.py 
must use python 2.5 or greater

而不是这个结果:

$ ~/bin/python2.4 tern.py 
  File "tern.py", line 5
    x = 1 if True else 2
           ^
SyntaxError: invalid syntax

(为同事提供渠道。)


Tags: orinpy版本脚本ifuse错误
3条回答

试试看

import platform
platform.python_version()

应该给你一个类似“2.3.1”的字符串。如果这不完全是您想要的,那么可以通过“平台”内置提供一组丰富的数据。你想要的东西应该在里面的某个地方。

您可以使用eval进行测试:

try:
  eval("1 if True else 2")
except SyntaxError:
  # doesn't have ternary

另外,with在Python 2.5中可用,只需添加from __future__ import with_statement

编辑:要尽早获得控件,可以将其拆分为不同的.py文件,并在导入之前检查主文件中的兼容性(例如,在包中的__init__.py):

# __init__.py

# Check compatibility
try:
  eval("1 if True else 2")
except SyntaxError:
  raise ImportError("requires ternary support")

# import from another module
from impl import *

在程序周围有一个执行以下操作的包装器。

import sys

req_version = (2,5)
cur_version = sys.version_info

if cur_version >= req_version:
   import myApp
   myApp.run()
else:
   print "Your Python interpreter is too old. Please consider upgrading."

如果您计划遇到使用2.0之前版本的Python解释器的人,但是您还有一些正则表达式要做,那么您也可以考虑使用sys.version()

也许有更优雅的方法来做到这一点。

相关问题 更多 >