如何修复pylint的‘too many statements’错误?附代码优化需求
解决Python代码触发pylint 'too many statements'错误的精简方案
问题背景
你这段单函数内的多分支代码可正常运行,但因函数内语句数量过多,触发了pylint的too many statements错误。下面是针对该问题的重构方案,既符合大学作业规范,又能消除pylint报错。
原代码片段
selection = input("输入1、2、3、4或5开始:\n") if selection == "1": print("\n你选择了'"+question_data[0][0]+"',开始答题!") for key in science: print("--------------------------------------------------------\n") print(key) for i in science_choices[num_question-1]: print("") print(i) choice = input("输入你的答案(A、B或C):\n").upper() answers.append(choice) correct_answers += check_correct_answer(science.get(key), choice) num_question += 1 player_score(correct_answers, answers) elif selection == "2": ................................................... elif selection == "3": ................................................... elif selection == "4": ................................................... elif selection == "5": ................................................... else: print("\n输入无效,请重试。\n") start_new_quiz()
重构方案
核心思路是将每个选项的业务逻辑提取为独立函数,再用字典映射选项到对应函数,替代冗长的if-elif链,大幅减少主函数内的语句数量。
步骤1:提取分支逻辑为独立函数
把每个选项对应的答题逻辑拆成单独的函数,示例如下:
def run_science_quiz(answers, correct_answers, num_question): print(f"\n你选择了'{question_data[0][0]}',开始答题!") for key in science: print("--------------------------------------------------------\n") print(key) for i in science_choices[num_question-1]: print("\n" + i) choice = input("输入你的答案(A、B或C):\n").upper() answers.append(choice) correct_answers += check_correct_answer(science.get(key), choice) num_question += 1 player_score(correct_answers, answers) return answers, correct_answers, num_question # 同理为选项2-5创建对应的函数 def run_history_quiz(answers, correct_answers, num_question): # 这里写选项2的逻辑 pass def run_literature_quiz(answers, correct_answers, num_question): # 这里写选项3的逻辑 pass def run_math_quiz(answers, correct_answers, num_question): # 这里写选项4的逻辑 pass def run_geography_quiz(answers, correct_answers, num_question): # 这里写选项5的逻辑 pass
步骤2:用字典映射选项与函数
在主函数中用字典替代if-elif链,简化逻辑:
def main_quiz_logic(): selection = input("输入1、2、3、4或5开始:\n") # 建立选项到处理函数的映射 quiz_handlers = { "1": run_science_quiz, "2": run_history_quiz, "3": run_literature_quiz, "4": run_math_quiz, "5": run_geography_quiz } # 获取对应的处理函数,处理无效输入 handler = quiz_handlers.get(selection) if handler: # 传入需要维护的状态变量(根据实际需求调整) answers, correct_answers, num_question = handler(answers, correct_answers, num_question) else: print("\n输入无效,请重试。\n") start_new_quiz()
方案优势
- 消除pylint的
too many statements错误,主函数内语句数大幅减少 - 每个函数职责单一,代码结构更清晰,便于后续维护和修改
- 新增选项时只需添加对应函数和字典映射,扩展性更强
内容的提问来源于stack exchange,提问作者T-M
相关产品推荐
相关产品推荐

