Подтвердить что ты не робот

Код python 2: если python 3, то sys.exit()

У меня есть большой кусок кода Python 2. Он хочет проверить Python 3 в начале и выйти, если используется python3. Поэтому я попробовал:

import sys

if sys.version_info >= (3,0):
    print("Sorry, requires Python 2.x, not Python 3.x")
    sys.exit(1)

print "Here comes a lot of pure Python 2.x stuff ..."
### a lot of python2 code, not just print statements follows

Однако выхода не происходит. Выход:

$ python3 testing.py 
  File "testing.py", line 8
        print "Here comes a lot of pure Python 2.x stuff ..."
                                                        ^
SyntaxError: invalid syntax

Итак, похоже, что python проверяет весь код перед выполнением чего-либо и, следовательно, на ошибку.

Есть ли хороший код для кода python2 для проверки использования python3, и если это так печатать что-то дружеское, а затем выйти?

4b9b3361

Ответ 1

Python будет байт-компилировать исходный файл, прежде чем приступать к его выполнению. Весь файл должен, по крайней мере, правильно разобрать, иначе вы получите SyntaxError.

Самое простое решение для вашей проблемы - написать небольшую оболочку, которая анализирует как Python 2.x, так и 3.x. Пример:

import sys
if sys.version_info >= (3, 0):
    sys.stdout.write("Sorry, requires Python 2.x, not Python 3.x\n")
    sys.exit(1)

import the_real_thing
if __name__ == "__main__":
    the_real_thing.main()

Оператор import the_real_thing будет выполняться только после инструкции if, поэтому код в этом модуле не требуется для синтаксического анализа в качестве кода Python 3.x.