代码之家  ›  专栏  ›  技术社区  ›  Stunner

使用无效语法执行脚本时检查python解释器的版本

  •  11
  • Stunner  · 技术社区  · 14 年前

    我有一个使用python 2.6版语法的python脚本(除了 错误 作为 价值 :)哪个版本的2.5有问题。因此,在我的脚本中,我包含了一些代码,在继续之前检查python解释器版本,这样用户就不会受到严重错误的影响,但是,无论我将代码放在哪里,它都不起作用。一旦它碰到奇怪的语法,它就会抛出语法错误,忽略我的任何版本检查尝试。

    我知道我可以简单地在发生语法错误的区域上放置一个try/except块,并在那里生成消息,但是我想知道是否有更“优雅”的方法。因为我不太喜欢在我的代码上放置try/except块来解决版本问题。我研究过使用一个init.py文件,但是用户不会将我的代码作为包导入/使用,所以我认为这个路由不会工作,除非我丢失了一些东西…

    这是我的版本检查代码:

    import sys
    def isPythonVersion(version):
        if float(sys.version[:3]) >= version:
            return True
        else:
            return False
    
    if not isPythonVersion(2.6):
        print "You are running Python version", sys.version[:3], ", version 2.6 or 2.7 is required. Please update. Aborting..."
        exit()
    
    4 回复  |  直到 10 年前
        1
  •  12
  •   bstpierre Edgar Aviles    14 年前

    创建一个检查版本并调用真实脚本的包装脚本——这使您有机会在解释器尝试语法检查真实脚本之前检查版本。

        2
  •  10
  •   Tony Veijalainen    14 年前

    在代码的开头有类似的内容吗?

    import sys
    if sys.version_info<(2,6):
        raise SystemExit('Sorry, this code need Python 2.6 or higher')
    
        3
  •  9
  •   eumiro    14 年前

    sys.version_info 您将找到存储在元组中的版本信息:

    sys.version_info
    (2, 6, 6, 'final', 0)
    

    现在您可以比较:

    def isPythonVersion(version):
        return version >= sys.version_info[0] + sys.version_info[1] / 10.
    
        4
  •  1
  •   Katriel    14 年前

    如果速度不是优先考虑的问题,可以使用 sys.exc_info 获取上一个异常的详细信息。