首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有使用所需的python版本,如何优雅退出?

如果没有使用所需的python版本,如何优雅退出?
EN

Stack Overflow用户
提问于 2020-06-25 14:57:50
回答 1查看 151关注 0票数 0

我想让python脚本检查python解释器的版本,并只执行所需的python版本。

我想使用只有在3.6版之后才能使用的f-string格式,因此编写了如下版本校验码:

代码语言:javascript
复制
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检查脚本,如下所示:

代码语言:javascript
复制
$ 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语句,如下所示:

代码语言:javascript
复制
assert sys.version_info >= (3, 6), \
        "this code requires python 3.6 for operation"

但是这段代码并不能像预期的那样工作,因为“当在编译时请求优化时,当前的代码生成器不会为assert语句发出代码”。

documentation说断言表达式可以更好地描述为等价于

代码语言:javascript
复制
if __debug__:
   if not expression: raise AssertionError

我如何修改上面的代码,以便像预期的那样,在python 3.6以下的版本上以错误消息打印的方式退出?

EN

回答 1

Stack Overflow用户

发布于 2020-06-25 15:10:34

对于不同的python打印版本,您可以在try catch中使用print。

代码语言:javascript
复制
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}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62569556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档