如果 运行 解释器的版本低于要求,如何让脚本退出?

How to have a script exit if it's running a earlier version of the interpreter than required?

我想为我的命令行脚本要求 Python v3.6+。我有一个名为 quit_on_27.py 的脚本,如下所示:

import sys

if sys.version_info < (3, 6):
    sys.exit("Please use Python 3.6+")


def hello(name:str):
    print(f'Hello, {name}!')


if __name__ == '__main__':
    hello('Jon')

当我 运行 使用 Python 2.7 将其作为脚本时:

> python .\quit_on_27.py
  File ".\quit_on_27.py", line 7
    def hello(name:str):
                  ^
SyntaxError: invalid syntax

当我使用 How do I check what version of Python is running my script? 中提到的 assert sys.version_info >= (3, 6) 代替我上面的条件时,我也有相同的 SyntaxError

我想使用 Python 2.7 中不可用的打字和 f-strings 以及其他功能,我想让用户知道使用更新版本的 Python 而不是不仅仅是看到 SyntaxError。

如何让这个脚本优雅而有益地退出?

这比 How can I have a python script safely exit itself? 更具体,因为我问的是为什么我的条件无法根据 Python 运行 脚本的版本按预期工作。

注意:我的脚本 运行 符合 Python 3.6.

中的预期

正如我(和@Klaus D.)所建议的那样,处理这种使用的语法与早期版本的解释器不兼容的情况的一种方法是将使用该语法的代码放入不同的脚本中并且只有 import 如果版本等于或高于所需的最低版本。

虽然如此,但 另一种 方法是 "hide" 字符串中的违规代码,并且仅在版本检查通过时才执行该字符串:

我的意思是:

import sys

if sys.version_info < (3, 6):
    sys.exit("Please use Python 3.6+")

exec("""
    def hello(name:str):
        print(f'Hello, {name}!')
""")

if __name__ == '__main__':
    hello('Jon')

后一种方法可能与您可能使用的其他工具(如 mypy)不兼容,具体取决于 "smart" 它们的使用方式……