首页 > 解决方案 > 实现 f 字符串时如何捕获 SyntaxError - 使用过时的 python 时

问题描述

我正在处理我认为是一件小事但我无法让它发挥作用的问题。如标题所示 - 我编写了一个程序,由于 f-strings 的存在,需要使用 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()

问题是在脚本启动之前我仍然遇到了那个错误。

原因 - 据我研究 - 是:

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

链接:无法捕获语法错误python

我仍然不知道如何在 f-strins 使用案例中做到这一点。

谢谢你的时间

标签: pythonsyntax-error

解决方案


看起来您想要在 3.6 之前的版本上做的就是报告错误并终止程序,而您只想要一个比 SyntaxError 堆栈跟踪更用户友好的错误消息。在这种情况下,与其尝试捕获 SyntaxError,不如拥有一个不使用 f-strings 的入口点文件,并在那里进行版本检查,然后再加载任何使用 f-strings 的代码:

# entry point
import sys

if sys.version_info < (3, 6):
    # report error, terminate program
else:
    import whatever
    whatever.main()

推荐阅读