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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:40:31