如何解决我可以在解释器解析代码之前声明python版本吗?
import sys
assert sys.version_info >= (3,6),"Use Python 3.6 or newer"
print(f"a format string")
$ python fstring.py. # default python is 2.7
File "fstring.py",line 3
print(f"a format string")
^
SyntaxError: invalid Syntax
是否可以在不将所有f字符串包装在try块内的情况下针对每个文件执行此操作?
解决方法
否,这不可能在每个文件的基础上进行,因为解析是在整个文件执行之前进行的,因此是在检查任何断言之前进行的。由于同样的原因,try
也将不起作用。
这可能唯一可行的方法是,通过将代码放入字符串中并调用eval
将代码的一部分解析推迟到运行时,但是...不要这样做。您有两个明智的选择:根本不使用f字符串,或者让它以SyntaxError
而不是您自己的自定义错误消息失败。
或者,如果您在Unix或Linux系统上工作,则可以将文件标记为可执行文件,并像#!/usr/bin/python3.8
一样在文件开头加上shebang行,这样用户就不需要知道自己使用的正确版本。
如果要改为按模块进行操作,请参阅@Chris的答案。
,如果您正在编写模块,则可以通过模块的__init__.py
完成,例如如果你有类似的东西
-
foo_module/
-
__init__.py
-
foo_module/
-
foo.py
-
-
setup.py
-
__init__.py
所在的地方
import sys
assert sys.version_info >= (3,6),"Use Python 3.6 or newer"
和foo.py
包含
print(f"a format string")
示例:
Python 2.7.18 (default,Jun 23 2020,19:04:42)
[GCC 7.5.0] on linux2
Type "help","copyright","credits" or "license" for more information.
>>> from foo_module import foo
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "foo_module/__init__.py",line 4,in <module>
assert sys.version_info >= (3,"Use Python 3.6 or newer"
AssertionError: Use Python 3.6 or newer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。