Python 如果脚本退出';运行的解释器版本比要求的版本早?
我希望命令行脚本需要PythonV3.6+。我有一个脚本名为Python 如果脚本退出';运行的解释器版本比要求的版本早?,python,python-2.7,typechecking,Python,Python 2.7,Typechecking,我希望命令行脚本需要PythonV3.6+。我有一个脚本名为quit\u on_27.py,如下所示: 导入系统 如果系统版本信息=(3,6)替代上述条件时,我也有相同的SyntaxError 我想使用Python 2.7中没有的类型、f字符串和其他功能,并且我想让用户知道使用较新版本的Python,而不仅仅是看到语法错误 如何让这个脚本优雅而有效地退出 这比我问的更具体,因为基于运行脚本的Python版本,为什么我的条件语句不能按我的预期工作 注意:我的脚本确实按照Python 3.6中的预期
quit\u on_27.py
,如下所示:
导入系统
如果系统版本信息<(3,6):
sys.exit(“请使用Python 3.6+”)
def你好(姓名:str):
打印(f'Hello,{name}!')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
你好(‘乔恩’)
当我使用Python 2.7将其作为脚本运行时:
> python .\quit_on_27.py
File ".\quit_on_27.py", line 7
def hello(name:str):
^
SyntaxError: invalid syntax
当我使用assert sys.version\u info>=(3,6)
替代上述条件时,我也有相同的SyntaxError
我想使用Python 2.7中没有的类型、f字符串和其他功能,并且我想让用户知道使用较新版本的Python,而不仅仅是看到语法错误
如何让这个脚本优雅而有效地退出
这比我问的更具体,因为基于运行脚本的Python版本,为什么我的条件语句不能按我的预期工作
注意:我的脚本确实按照Python 3.6中的预期运行。正如我(和@Klaus D.)所建议的,有一种方法可以处理这样的情况,即使用的语法与早期版本的interpeter不兼容,将使用该语法的代码放入不同的脚本中,并且仅当版本等于或高于所需的最低版本时才导入
也就是说,另一种方法是在字符串中“隐藏”有问题的代码,并且只有在版本检查通过时才执行该字符串:
我的意思是:
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')
导入系统
如果系统版本信息<(3,6):
sys.exit(“请使用Python 3.6+”)
执行官
def你好(姓名:str):
打印(f'Hello,{name}!')
""")
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
你好(‘乔恩’)
后一种方法可能与您正在使用的其他工具(如mypy)不兼容,这取决于它们的“智能”程度……主要模块需要始终具有与Python 2兼容的语法。但是在检查之后,您只能导入Python3模块。我不太明白你所说的“主要模块”是什么意思。我只是导入
sys
。我将把我的hello()
函数放在哪里,以便检查Python的版本?编辑:键入如果要进行与Python 2兼容的版本检查,则要启动的模块必须使用与Python 2兼容的语法。您可以将与Python2不兼容的函数放在一个额外的模块中,并在检查后导入它们。避免错误的一种方法是将有问题的代码放在单独的模块中,如果版本低于支持该模块的最低版本,则不导入该模块。@martineau,Klaus D。我想你们两人同时回答了我的问题。我不确定礼仪要求什么,但如果作为答案输入,我很乐意接受您的任何一条评论。编辑:打字错误