我希望我的Python脚本检测版本,并​​在不匹配的情况下优雅地退出

Ham*_*jan 4 python version

我想让它尽可能通用 - 例如尽可能多地处理.

由于版本3不向后兼容版本2,我想确保使用正确的打印语句.

如果您有任何疑问,请随时告诉我,并根据可用的(例如图书馆)分享与动态逻辑有关的相关知识.

假设我有一个脚本只能在版本1.x,或2.x或3.x下运行.

或者需要库A或库B的脚本.

谢谢!

编辑:

现在......当谈到Python(不像.Net)时,一些像SciPy,Google App Engine这样的库会让你紧紧抓住特定的版本.在Linux,Mac Os上,您可以在命令行上切换不同的Python安装.这就是我想避免混淆的原因 - 我想记住哪个脚本适用于哪个版本的Python以及它需要哪些库.我宁愿让它以人类可读的方式失败.

csc*_*hol 8

sys模块还包含版本信息(首次在2.0版中提供):

import sys

if sys.version_info[0] == 2:
    print("You are using Python 2.x")
elif sys.version_info[0] == 3:
    print("You are using Python 3.x")
Run Code Online (Sandbox Code Playgroud)


vez*_*ult 7

如果要在版本2和版本3之间混合语法,为了解决语法错误,您必须使用条件导入.

# just psuedocode
if version is x:
   import lib_x # contains version x implementation
else:
   import lib_y # contains version y compatible implementation
Run Code Online (Sandbox Code Playgroud)

不建议尝试保持python3和旧版本之间的兼容性.也就是说,这里有几种方法可以检测正在使用的python版本:

虽然不是特别人性化,但sys.hexversion它将适用于最广泛的python版本,因为它是在1.5.2版本中添加的:

import sys
if sys.hexversion == 0x20505f0:
    print "It's version 2.5.5!"
Run Code Online (Sandbox Code Playgroud)

您应该能够从sys.version_info(在python 2.0中添加)获取版本信息:

import sys
if sys.version_info[0] == 2:
    print "You are using version 2!"
else:
    print "You are using version 1, because you would get SyntaxErrors if you were using 3!"
Run Code Online (Sandbox Code Playgroud)

或者你可以使用平台模块,虽然它是在python 2.3中引入的,并且在旧版本中不可用(假设你甚至关心它们):

try:
    import platform
    if platform.python_version().startswith('2'):
        print "You're using python 2.x!"
except ImportError, e:
    print "You're using something older than 2.3. Yuck."
Run Code Online (Sandbox Code Playgroud)

  • sys.version_info是一个包含版本XYZ而不是函​​数的元组. (2认同)