猿问

验证脚本中的 python 版本被 SyntaxError 停止

使用较新 python 版本的功能,例如 f-string debugging feature: f'{some_var=}',结果为SyntaxError.

假设我有一个我想提供的 python 脚本,并且用户使用旧的 python 版本执行所述脚本,他只会得到这个错误。相反,我想为他提供一些有意义的文字,例如"Please update python to version >=3.7"

我可以用一个main文件来解决它,它检查版本然后导入我的脚本。

有没有办法实现这一点,同时仍然只有一个文件脚本?

可能的方法:

  • 检查sys.versionplatfrom.python_version_tuple -> 不可能,SyntaxError妨碍,因为 python 解析整个文件

  • 使用 eval 来确定SyntaxError: -> 出于同样的原因不可能

try: 
    a = "hello" 
    eval("f'{a=}'") 
except SyntaxError: 
    raise ImportError('Update your Python version!!!!')

我可以以某种方式欺骗 Python 不在语法上检查整个文件吗?

(我可以将整个文件“打包”成一个字符串,检查版本,然后检查eval字符串,但这不是一个非常干净的解决方案,而且对开发来说很糟糕)

编辑:这个问题不是关于“如何检查 python 版本”。相反,它是关于“如何在我收到新功能之前检查 python 版本SyntaxError


暮色呼如
浏览 81回答 1
1回答

拉风的咖菲猫

我可以想到一个可能的解决方案,将整个脚本包装在一个三引号字符串中(您需要确保它不会与脚本中的任何三引号字符串冲突),然后传递,像exec这样:import sysif sys.version_info < (3, 7):&nbsp; &nbsp; raise ImportError("I need python 3.7 or higher to run!")exec('''# your entire script''')... 在这一点上,我建议要么只使用两个文件,要么在您的网站上记录,或者在语法错误意味着什么的任何地方记录。
随时随地看视频慕课网APP

相关分类

Python
我要回答