Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果脚本退出';运行的解释器版本比要求的版本早?_Python_Python 2.7_Typechecking - Fatal编程技术网

Python 如果脚本退出';运行的解释器版本比要求的版本早?

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中的预期

我希望命令行脚本需要PythonV3.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。我想你们两人同时回答了我的问题。我不确定礼仪要求什么,但如果作为答案输入,我很乐意接受您的任何一条评论。编辑:打字错误