我想让python脚本检查python解释器的版本,并只执行所需的python版本。
我想使用只有在3.6版之后才能使用的f-string格式,因此编写了如下版本校验码:
import sys
# Python version check
major, minor, micro, _, _ = sys.version_info
if (major, minor) < (3, 6):
print("current python version: %d.%d" % (major, minor))
print("this code requires python 3.6 for operation")
sys.exit()
else:
print(f"current python version:{major}.{minor:d}")
# use of f-string feature available from 3.6 version
pi = 3.141592
print(f"pi with precision 2 is {pi:.2f}")我的意图是在未使用所需的python版本时优雅地退出并显示错误消息。但是用不同版本的python检查脚本,如下所示:
$ python --version
Python 2.7.12
$ python ./python_version_check.py
File "./python_version_check.py", line 16
print(f"current python version:{major}.{minor:d}")
^
SyntaxError: invalid syntax
$ python3 --version
Python 3.5.2
$ python3 ./python_version_check.py
File "./python_version_check.py", line 16
print(f"current python version:{major}.{minor:d}")
^
SyntaxError: invalid syntax
$ conda activate python3
$ python --version
Python 3.6.6 :: Anaconda, Inc.
$ python ./python_version_check.py
current python version:3.6
pi with precision 2 is 3.14它使SyntaxErr低于3.6版本的python,而不是优雅的退出。
我还尝试在版本检查部分使用assert语句,如下所示:
assert sys.version_info >= (3, 6), \
"this code requires python 3.6 for operation"但是这段代码并不能像预期的那样工作,因为“当在编译时请求优化时,当前的代码生成器不会为assert语句发出代码”。
documentation说断言表达式可以更好地描述为等价于
if __debug__:
if not expression: raise AssertionError我如何修改上面的代码,以便像预期的那样,在python 3.6以下的版本上以错误消息打印的方式退出?
发布于 2020-06-25 15:10:34
对于不同的python打印版本,您可以在try catch中使用print。
import sys
# Python version check
major, minor, micro, _, _ = sys.version_info
if (major, minor) < (3, 6):
try:
print("current python version: %d.%d" % (major, minor))
print("this code requires python 3.6 for operation")
except:
print "current python version: %d.%d" % (major, minor)
print "this code requires python 3.6 for operation"
finally:
exit()
else:
print(f"current python version:{major}.{minor:d}")
# use of f-string feature available from 3.6 version
pi = 3.141592
print(f"pi with precision 2 is {pi:.2f}")https://stackoverflow.com/questions/62569556
复制相似问题