为什么python 2.4会忽略我的退出函数?

时间:2016-07-11 18:38:33

标签: python exit python-2.4

我编写了一个只在2.6或2.7版本上运行的脚本。我已经安排检查是否安装了另一个版本,并检查是否有可用的兼容版本。这是我的代码片段;

# !/usr/bin/python

import sys, os, re
from sys import exit

if sys.version[0:3] in ['2.6', '2.7']:
    import subprocess, datetime, os.path, json, urllib2, socket

def python_version():

    version = sys.version[0:3]

    while version not in ['2.6', '2.7']:

        print '\n\nYou\'re using an incompatible version of Python (%s)' % version

        python_installed_version = []

        for files in os.listdir("/usr/bin/"):  # check to see version of python already on the box

            python_version = re.search("(python2(.+?)[6-7]$)", files)

            if python_version:
                python_installed_version.append(python_version.group())

        if python_installed_version:

            print 'Fortunately there are compatible version(s) installed. Try the following command(s): \n\n',

            for version in python_installed_version:
                print 'curl http://script.py  | %s\n' % version

        sys.exit()

python_version()

with p.stdout:

print 'hello'

当我在python 2.4中运行上面的内容时,我收到此错误;

  File "<stdin>", line 46
      with p.stdout:
     ^
SyntaxError: invalid syntax

我不明白为什么脚本在检测到你正在使用sys.exit()使用python 2.4时不会立即退出,而是继续读取脚本并在上面给出错误{{{ 1}}被读取。

我删除了with p.stout:行,它会正常工作,但不会读取with p.stdout:。我不知道print 'hello'导致脚本崩溃的原因。这在2.6和2.7上完全正常。

关于为什么python 2.4仍会读取with p.stdout:行的任何想法?感谢。

1 个答案:

答案 0 :(得分:4)

Python 2.4还没有with语法支持,因此脚本在解析阶段失败,而不是在运行时失败。您可以通过使用包装器来解决这个问题:

if version_check_ok():
    import actual_app
    actual_app.run()
else:
    ...

这样,在您知道这样做之前,不会导入/解析具有新语法的新文件。但是,您无法将导入移到版本检查之上。