Python使用format动态格式化字符串报IndexError该如何解决
问题原因
你遇到的报错本质是str.format()方法接收的参数数量和模板占位符数量不匹配:模板one里有6个{}占位符,你直接传入单个two字符串时,format只拿到1个参数,自然会报索引越界错误,你的初始猜测完全正确。
你之前尝试用字典的方案属于绕了弯路,循环遍历two的时候是逐字符遍历字符串,不是拆分后的时间片段,自然会出现重复字符导致字典键冲突的问题。
最优解决方案
只需要先把two按逗号拆分作为列表,再用*解包传入format即可,全程不需要创建字典,一行代码就能搞定,也完全兼容带毫秒的时间场景:
# 基础场景 one = "{}{}{}T{}:{}:{}" two = '2021,-10,-28,05,40,33' print(one.format(*two.split(','))) # 输出:2021-10-28T05:40:33 # 带毫秒的场景 two = '2021,-10,-28,00,00,00.478' print(one.format(*two.split(','))) # 输出:2021-10-28T00:00:00.478
如果后续需要对时间片段做额外校验或者格式调整,也可以先把拆分后的列表存为变量再处理:
time_parts = two.split(',') # 可以在这里对time_parts的各个元素做补零、格式转换等操作 print(one.format(*time_parts))
内容的提问来源于stack exchange,提问作者newdeveloper
相关产品推荐
相关产品推荐

