在编译时抑制语法错误

时间:2015-02-27 10:30:54

标签: python python-2.7

我想知道是否可以在Python中编译时抑制语法错误。

我的办公室目前运行2.4,虽然我们试图将所有人都调到2.7然后3.x,但这需要一些时间。因此,我们在所有服务器上都有2.4和2.7解释器。

考虑到我们必须处理的一些文件的大小,在2.7中运行文件通常是最佳的,但python命令默认为2.4并且大多数人都不知道,或者根本不会使用,python27

因此,我正在制作一个小标题,以添加到某些Python脚本中,如果它检测到它处于更低的位置,它将重新运行2.7中的脚本:

if sys.version_info[0] == 2 and sys.version_info[1] < 7:
    print "This file is best run in python 2.7 for performance purposes."
    print
    print "Running in 2.7 now..."
    subprocess.call('python27', 'python_process.py', sys.argv[1])

我还没机会测试这个,因为当我在2.4中运行文件时,我立即得到语法错误:

File "x:\phlib\pyprg\replace_double_with_single_quotes.py", line 12
    with open(sys.argv[1], 'rb') as to_clean, \
            ^
SyntaxError: invalid syntax

以下是错误的整行:

with open(sys.argv[1], 'rb') as to_clean, \
     open(sys.argv[1]+'.clean', 'wb') as cleaned:

如果我在2.7中运行该文件,它可以正常工作。

这显然是因为2.4不理解with语句,虽然我可以简单地删除with并使用file.open()/ file.close(),但我们想利用在移至3.x之前,2.7中的新函数和库。

所以我想知道是否可以抑制此SyntaxError以允许程序运行。如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

您无法从同一个文件控制编译时问题,没有。您的顶级脚本 与Python 2.4兼容,以使您的交换机正常工作。例如,将所有内容从主脚本移到模块中。

您的另一个选择是更新所有这些服务器,以使用为您进行切换的包装脚本替换python。可以使用前面python中列出的位置中的PATH命令或shell别名来完成此操作。