我想知道是否可以在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
以允许程序运行。如果是,怎么样?
答案 0 :(得分:1)
您无法从同一个文件控制编译时问题,没有。您的顶级脚本 与Python 2.4兼容,以使您的交换机正常工作。例如,将所有内容从主脚本移到模块中。
您的另一个选择是更新所有这些服务器,以使用为您进行切换的包装脚本替换python
。可以使用前面python
中列出的位置中的PATH
命令或shell别名来完成此操作。