我可以在解释器解析代码之前断言 python 版本吗?

hoo*_*rEE 3 python version-detection f-string

我想通知用户他们应该使用哪个 python 版本:

import sys
assert sys.version_info >= (3, 6), "Use Python 3.6 or newer"
print(f"a format string")
Run Code Online (Sandbox Code Playgroud)

但是相反,运行上述文件会导致语法错误:

$ python fstring.py. # default python is 2.7
  File "fstring.py", line 3
    print(f"a format string")
                           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

是否可以按文件执行此操作,而无需将所有 f 字符串包装在 try 块内?

kay*_*ya3 6

不,这在每个文件的基础上是不可能的,因为在执行任何文件之前对整个文件进行解析,因此在检查任何断言之前。try出于同样的原因,也不起作用。

这可能起作用的唯一方法是,如果您通过将代码放入字符串中并调用 将部分代码的解析推迟到运行时eval,但是...不要那样做。您有两个明智的选择:根本不使用 f 字符串,或者让它失败,SyntaxError而不是您自己的自定义错误消息。

或者,如果您在 Unix 或 Linux 系统上工作,那么您可以将文件标记为可执行文件并在开始时给它一个shebang行,#!/usr/bin/python3.8这样用户就不需要知道正确的版本来使用自己。

如果您想在每个模块的基础上执行此操作,请参阅@Chris 的回答。

  • @barny 这根本不是问题所在;我不明白你是如何阅读这个问题并得出这个结论的。 (2认同)
  • @barny,但他们不能这样做并在同一段源代码中使用 f 字符串 (2认同)