2015-07-06 2 views
4

У меня есть сценарий, который должен запускаться только с Python 3. Я хочу дать хорошее сообщение об ошибке, говорящее, что этот скрипт не должен запускаться с python2, если пользователь пытается запустить его с Python 2.xКак передать исключение, если скрипт запущен с Python 2?

How я это делаю? Когда я пытаюсь проверить версию Python, она все равно выдает ошибку, так как Python анализирует весь файл перед выполнением моего условия if.

Если возможно, я не хочу писать другой сценарий.

+1

Если это 'SyntaxError', вы не можете избежать этого; как вы говорите, ошибка доходит до * любого написанного вами кода. Вы должны написать код, который * синтаксически действителен * в обеих версиях. – jonrsharpe

+0

Вам необходимо сначала исправить ошибку синтаксиса, а затем беспокоиться о проверке версии. –

+0

В [Как проверить версию Python в программе, использующей новые языковые функции?] (Http://stackoverflow.com/questions/446052/how-can-i-check-for-python- version-in-a-program-that-uses-new-language-features) –

ответ

9

Вы можете написать обертку запуска сценарий, в котором вы только импортировать ваш фактический сценарий и поймать синтаксические ошибки:

try: 
    import real_module 
except SyntaxError: 
    print('You need to run this with Python 3') 

Тогда, когда real_module.py использует Python 3 синтаксис, который генерирует исключение при использовании с Python 3, вместо этого выводится вышеприведенное сообщение.

Конечно, вместо того, чтобы просто импортировать скрипт, вы также можете сначала проверить версию, а затем импортировать ее, когда версия равна 3. Это имеет то преимущество, что вы все равно увидите синтаксические ошибки вашего реального скрипта, даже если вы запустить его с Python 3:

import sys 
if sys.version_info[0] < 3: 
    print('You need to run this with Python 3') 
    sys.exit(1) 

import real_module 
+0

Наделся на метод без создания другого скрипта. Невозможно сделать это с помощью 1 скрипта? – AbdealiJK

+0

Нет, как говорят другие в комментариях, весь скрипт анализируется до того, как интерпретатор запускает любой код. Таким образом, синтаксическая ошибка будет выдаваться до того, как любой код, который вы могли бы добавить, будет запущен. – poke

+0

@AJK это ваш единственный вариант по всем причинам, которые вам уже объяснили. – jonrsharpe

1

Попробуйте это:

import sys 
#sys.version gives you version number in this format 
#(2, 5, 2, 'final', 0) 
version=sys.version_info[0] 

if version == 2: 
    sys.exit("This script shouldn't be run by python 2 ") 
+1

Опять же, синтаксические ошибки могут быть сброшены до запуска этого скрипта. –

1
import sys 
if (sys.version_info > (2, 0)): 
    raise Exception('script should not be run with python2.x') 

Это поднимет ошибку, если скрипт работает под 2.x питона версии

+1

Опять же, если есть синтаксическая ошибка, она ** не получит этого **. – jonrsharpe

+0

Над строкой должна быть первая строка скрипта. При выполнении кода он будет проверять версию python в начале. –

+1

Не имеет значения, где в сценарии это, Python ** не начнет запускать файл **, если в коде есть фактический символ «SyntaxError». – jonrsharpe

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