当使用过时的python时,如何在实现f字符串时捕获语法错误

当使用过时的python时,如何在实现f字符串时捕获语法错误,python,syntax-error,Python,Syntax Error,我正在处理我认为是一件小事的问题,但我无法让它发挥作用。 正如标题中所述,由于存在f字符串,我编写了一个需要使用python3.6+的程序。我的意图是在用户的操作系统上安装了python3.5时捕获SyntaxError 我最初的想法是: def main(): var = "more" print(f'I like f-strings a lot and {var}') if __name__ == "__main__": if

我正在处理我认为是一件小事的问题,但我无法让它发挥作用。 正如标题中所述,由于存在f字符串,我编写了一个需要使用python3.6+的程序。我的意图是在用户的操作系统上安装了python3.5时捕获SyntaxError

我最初的想法是:

def main():
    var = "more"
    print(f'I like f-strings a lot and {var}')

if __name__ == "__main__":
    if (sys.version_info.major == 3) and (sys.version_info.minor < 6):
        print("This program requires python3.6 or newer")
        print(old_python_error_message)
    else:
        print("Program starts...")
        main()
def main():
var=“更多”
print(f'I非常喜欢f字符串和{var}')
如果名称=“\uuuuu main\uuuuuuuu”:
如果(sys.version\u info.major==3)和(sys.version\u info.minor<6):
打印(“此程序需要python3.6或更新版本”)
打印(旧的python错误消息)
其他:
打印(“程序启动…”)
main()
问题是,在脚本启动之前,我仍然会遇到这个错误

据我调查,原因是:

只有在从eval、exec或import操作中抛出SyntaxError时,才能捕获它

链接:

我仍然不知道如何在f-strins的使用情况下做到这一点


感谢您的时间

看来您在3.6之前的版本上所要做的就是报告错误并终止程序,您只需要一条比SyntaxError堆栈跟踪更方便用户的错误消息。在这种情况下,在加载任何使用f字符串的代码之前,使用不使用f字符串的入口点文件,并在该文件中执行版本检查,而不是尝试捕获SyntaxError:

# entry point
import sys

if sys.version_info < (3, 6):
    # report error, terminate program
else:
    import whatever
    whatever.main()
#入口点
导入系统
如果系统版本信息<(3,6):
#报告错误,终止程序
其他:
进口什么
随便了

你不能。如果您的代码中有一个f-string,并且您在预f-string版本的Python中运行它,那么您会遇到一个无法捕捉的语法错误,因为Python无法解析该文件。使用一个将f-string向后移植到较旧Python版本的包怎么样?如果您想支持3.6之前的代码,为什么不使用f-string呢?@MZ我不想“支持”信息技术我想给用户有用的反馈。由于使用方便,使用f字串对我来说是一件幸事。@Shiva很高兴知道,但如上所述。我不想“支持”它。只是提供反馈。这完全有效。谢谢。聪明。