Код 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, и если это так печатать что-то дружеское, а затем выйти?
Ответы
Ответ 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.