如何重写自定义循环以避免Python str.format()触发i+1相关键错误
问题原因
str.format()语法不支持在占位符{}内部直接执行算术运算,你代码里的{i+1}会被识别为需要传入名为i+1的参数,而不是计算i+1的值,所以才会触发KeyError。
最优重写方案
推荐用Python 3.6及以上支持的f-string语法,既可以直接在占位符内做算术运算,代码可读性也更高,同时还能自动适配最后一行不足20条的边界场景:
bookname = "Psalm" for start in range(1, 151, 20): # 生成当前行需要的索引,超过150自动截断 indices = range(start, min(start + 20, 151)) # 逐个生成hyperlink片段,再用&拼接成整行 items = [f"\\hyperlink{{{bookname}{i}}}{{{i}}}" for i in indices] line = r"\\hline" + "\n" + " & ".join(items) # 此处补充你自己的后续处理逻辑即可
如果需要兼容Python 3.6以下的版本,可以提前计算每个索引的值再传入format:
bookname = "Psalm" for start in range(1, 151, 20): indices = range(start, min(start + 20, 151)) items = [] for i in indices: items.append("\\hyperlink{{{bn}{i}}}{{{i}}}".format(bn=bookname, i=i)) line = r"\\hline" + "\n" + " & ".join(items)
方案优势
- 不用手动写20个重复的占位符,代码更简洁易维护
- 自动处理最后一行不足20条的情况,不会生成无效的超链索引
- 完全规避了占位符内运算导致的KeyError问题
内容的提问来源于stack exchange,提问作者RichWalt
相关产品推荐
相关产品推荐

