Python删除学生记录时input函数类型错误及Y/N确认功能修复
修复Python学生记录删除函数的TypeError及确认逻辑问题
问题描述
开发学生记录删除函数时,要求删除前显示包含待删除学生姓名的Y/N确认提示,但因input()函数传入多个参数触发TypeError,错误提示为input expected at most 1 argument, got 3。
错误代码
def delete_student(): global student_info global database print("--- Delete Student ---") roll = input("Enter a Last Name: ") student_found = False updated_data = [] with open(database, "r", encoding="utf-8") as f: reader = csv.reader(f) counter = 0 for row in reader: if len(row) > 0: if roll != row[2]: updated_data.append(row) counter += 1 else: student_found = True if student_found is True: if input("Are you sure you want to delete record", roll, "(y/n) ") != "y": exit() with open(database, "w", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(updated_data) print("Student ", roll, "deleted successfully") else: print("Record not found") input("Press any key to continue")
错误栈
Traceback (most recent call last): File "/Users/jake./PycharmProjects/Munyak_Jacob_FinalProject/FileRecords.py", line 58, in <module> delete_student() File "/Users/jake./PycharmProjects/Munyak_Jacob_FinalProject/deleteRecord.py", line 27, in delete_student if input("Are you sure you want to delete record", roll, "(y/n) ") != "y": TypeError: input expected at most 1 argument, got 3 Process finished with exit code 1
修复方案
核心问题是input()仅接受1个字符串参数,需将多个参数合并为单个提示字符串,同时优化确认逻辑的严谨性:
import csv # 确保导入csv模块,原代码可能遗漏 def delete_student(): global student_info global database print("--- Delete Student ---") roll = input("Enter a Last Name: ") student_found = False updated_data = [] with open(database, "r", encoding="utf-8") as f: reader = csv.reader(f) # 保留表头(如果有) header = next(reader) updated_data.append(header) for row in reader: if len(row) > 0: if roll != row[2]: updated_data.append(row) else: student_found = True if student_found: # 使用f-string合并提示文本,支持大小写输入判断 confirm = input(f"Are you sure you want to delete record {roll}? (y/n) ").strip().lower() if confirm == "y": with open(database, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(updated_data) print(f"Student {roll} deleted successfully") else: print("Deletion canceled") else: print("Record not found") input("Press any key to continue")
关键修复点
- 修复TypeError:用f-string将提示文本和学生姓名合并为单个字符串传入
input(),解决多参数问题 - 优化确认逻辑:对用户输入做
strip()去除前后空格,lower()统一转为小写,支持Y/y/N/n等多种输入;取消exit()(会直接终止程序),改为判断后执行删除或提示取消,更符合交互逻辑 - CSV写入优化:添加
newline=""避免Windows下写入CSV出现空行 - 表头处理:保留CSV表头,避免删除数据时丢失表头信息(原代码会跳过表头,导致表头被误删除)
内容的提问来源于stack exchange,提问作者user20627835
相关产品推荐
相关产品推荐

