Попытка показать пользовательскую ошибку, если Python2 запускается для файла .py, не удается из-за синтаксической ошибки (файл .py содержит f-строки) - PullRequest
1 голос
/ 27 января 2020

Я написал программу, которая требует Python 3 (мы не будем поддерживать Python 2), но я хотел бы включить сообщение об ошибке, информирующее пользователя об этом, если он случайно запустит файл .py в Python2.

Я попытался сделать это, используя проверку версии в первых нескольких строках файла:

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

# Lots of other code here....

# And then...
foo = 2
bar = 3
print(f"Some message that uses f-strings like this: variables are {foo} {bar}")

Однако, когда файл .py фактически запускается с использованием Python 2, он возвращает синтаксическую ошибку в строке, используя f-строки. Это не очень легко понять.

Есть ли способ заставить программу провалиться при проверке версии и, таким образом, вернуть более полезное сообщение об ошибке?

Спасибо

1 Ответ

1 голос
/ 27 января 2020

Есть ли способ заставить программу завершиться с ошибкой при проверке версии и, таким образом, вернуть более полезное сообщение об ошибке?

Нет, потому что Python сначала должно быть возможность проанализировать и скомпилировать ваш файл. Это означает, что вы можете использовать только поддерживаемый синтаксис в файле, Python 2 не может анализировать f-строки.

Вам придется разделить ваш проект на несколько модулей, и в первом импортируемом модуле (скажем, в файле пакета __init__.py верхнего уровня), проверьте свою версию, прежде чем импортировать другие модули, которые зависят от Python -3 Speci c синтаксис.

Или вообще не включает такие проверки . Вместо этого установите python_requires для метаданных вашего проекта, чтобы они не устанавливались в более старых Python версиях.

...