2015-02-27 4 views
2

Мне интересно, возможно ли подавить синтаксическую ошибку во время компиляции в 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, и хотя я мог бы просто удалить его и использовать file.open()/file.close(), мы хотели бы воспользоваться новыми функциями и библиотеки в 2.7 до перехода на 3.x.

Так что я хотел бы знать, можно ли подавить этот SyntaxError, чтобы позволить программе работать. И если да, то как?

+0

укажите код перед 'with' statment. – Nilesh

+1

Почему бы вам не написать код совместимости версий до синтаксического анализа? – user3467349

+1

@ Lafada: какая разница? –

ответ

1

Вы не можете контролировать проблемы во время компиляции из этого же файла, no. В ваших сценариях верхнего уровня есть, чтобы быть совместимым с Python 2.4 для вашего коммутатора. Например, переместите все из основного сценария в модуль.

Другой вариант - обновить все эти серверы, чтобы заменить python сценарием оболочки, который выполняет переключение для вас. Это можно сделать с помощью команды python в месте, указанном ранее в PATH, или с псевдонимом оболочки.

+0

. Раздражает то, что наши системные администраторы медленно двигаются при установке последнего модуля py27 нам нужно, чтобы мы не могли просто заставить python к == python2.7. Похоже, что вы правы на модуле, хотя я надеялся избежать разделения сценария, это сделает вещи более запутанными для пользователей. благодаря – Scironic

Смежные вопросы