python - 实现 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 时,您才能捕获它。
我仍然不知道如何在 f-strins 使用案例中做到这一点。
谢谢你的时间
解决方案
看起来您想要在 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()
推荐阅读
- r - 组不为 NA 时的汇总统计
- python - 如何在熊猫数据框中找到一天中数小时的记录数趋势?
- python - 如何清除此 AttributeError “nonetype”?
- flutter - 如何使用 Flutter 制作定制的二维码扫描器?
- mysql - Prisma 上与 Self 的一对多关系
- c# - “钥匙不存在。” 签约时
- firebase-realtime-database - 使用两个不同的数据库实时部署 Firebase 函数 onWrite
- powerbi-embedded - 当我点击它时,有什么方法可以打印数据的详细信息?
- elasticsearch - Logstash 未在安全(https)kibana 中创建索引
- java - 如何查找重复的字符