СинтаксисError не исключается в Python 3

Я пытаюсь написать блок кода в верхней части моих программ, который, если программа случайно запущена в Python 2.x, выдает сообщение об ошибке и завершает работу, но если запуск в Python 3.x будет работать нормально :

try: print "Error: This program should only be run in Python 3." raw_input('>') exit() except SyntaxError: pass print("I see you're running Python 3.") # rest of program 

Это правильно работает в Python 2.7 (т. Е. Отображает ошибку и завершает работу), но когда я запускаю его в Python 3.3, я получаю SyntaxError, хотя я сказал, что имеет исключение.

  File "version.py", line 2 print "This program should only be run in Python 3" ^ SyntaxError: invalid syntax 

Что мне не хватает?

SyntaxError s выбрасывается во время компиляции . Вы не можете их поймать, как исключения во время выполнения.

Если вы хотите проверить версию python, посмотрите на sys.version_info .

т.е.

 import sys if sys.version_info.major < 3: sys.exit('This program should only be run in Python 3') 

Вот небольшой пример того, как делать то, что вы хотите:

 import sys if sys.version_info.major == 2: print("Error: This program should only be run in Python 3.") raw_input('>') exit(0) 

Этот код будет работать в python2 и python3. В этом случае вам не нужно использовать try catch. Поскольку в python2 бывает, что ( и ) будет иметь эффекта, поскольку они не являются кортежами. Вы можете написать такую ​​вещь, и она будет работать в python2 и python3 без SyntaxError.