You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用format函数报replacement index 1 out of range错误求助

报错原因
  • 第一处语法错误:format方法的右括号提前闭合,你写的报错行实际只有question[3]被传入format中,剩余的question[4]、question[5]、question[6]是print函数的独立参数,和format无关,format实际只拿到1个位置参数,自然找不到索引为1的参数。
  • 第二处逻辑错误:Python的str.format()占位符默认从0开始计数,你字符串中写的{1}、{2}、{3}、{4}共4个占位符,就算正确传入4个参数,合法索引范围也是0~3,用到索引4本身也会超出范围。
修复方案

直接修复报错行

方案1:修正format括号和占位符索引

print("'{0}', '{1}', '{2}', '{3}'".format(question[3], question[4], question[5], question[6]))

方案2:使用f-string简化写法(Python3.6及以上版本支持,可读性更高)

print(f"'{question[3]}', '{question[4]}', '{question[5]}', '{question[6]}'")

其他隐藏问题修复(否则后续仍会报错)

  • 计分逻辑错误:当前numOfQuestions仅在答错时计数,答对不会累加,计算得分百分比时分母会小于实际题量,甚至出现除零报错,应该把numOfQuestions += 1移到for question in questions循环内的第一层,每遍历一道题就计数一次。
  • 数据插入逻辑错误:insertData("INSERT INTO scores(userID,score,topicID) VALUES(?,?,?);")写法错误,应该直接将SQL语句赋值给变量:
    insert_sql = "INSERT INTO scores(userID,score,topicID) VALUES(?,?,?);"
    cursor.execute(insert_sql, (userID, score, topicID))
    
    同时你之前执行插入时传的topic是单道题的字段值,应该传函数入参的topicID才符合表结构逻辑。
  • 数据库连接范围错误:sqlite3的with上下文管理器仅包住了连接创建步骤,后续游标执行、提交操作都在上下文外,连接可能提前被关闭,应该把所有数据库操作都缩进在with sqlite3.connect("Quiz.db") as db:的代码块内。

内容的提问来源于stack exchange,提问作者Daniel Fall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:45:03