How to throw exception if script is run with Python 2?

None of these properly work as, as others have mentioned SyntaxErrors are parsed first, also doing except SyntaxError does not work either.

The best solution is a wrapper module, but if due to other technical or political reasons you cannot create another module in your code you can do the following very dirty trick:

z, *y=1,2,3,4 #This script requires requires python 3! A Syntax error here means you are running it in python2!

The result in python2.7 will be:

  File "notpython2.py", line 3
    z, *y=1,2,3,4 #This script requires requires python 3! A Syntax error here means you are running it in python2!
       ^
SyntaxError: invalid syntax

Yes the code is ugly, but if anyone can think of a better solution notwithstanding a new module please add it here.


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

This will raise error if script is running under 2.x python version


Try this:

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 ")

You can write a wrapper start-script in which you only import your actual script and catch for syntax errors:

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

Then, when real_module.py uses Python 3 syntax that would throw an exception when used with Python 3, the above message is printed out instead.

Of course, instead of just importing the script, you could also first check the version, and then import it when the version is 3. This has the benefit that you will still see syntax errors of your actual script even when you run it with 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