Python保存用户输入到文本文件触发TextIOWrapper.write()参数错误如何解决
报错原因与修复方案
报错根因
你遇到的TextIOWrapper.write() takes exactly one argument (2 given)报错,是因为Python内置的文件写入方法write()仅支持接收1个字符串类型的参数,你之前的代码应该是直接传入了多个参数(比如f.write(name, age)这种写法),才会触发参数数量不匹配的错误。
现有代码逻辑问题
你目前贴出的代码本身还有几个逻辑漏洞,就算解决参数报错也无法正常保存数据:
- main模块中调用
display.displayUser()后没有接收返回的用户输入数据,直接就关闭了文件,没有执行写入操作 - display模块首行的
r = menu.userInput()属于无效代码,你没有贴出menu.userInput()的实现,且用户输入逻辑已经在displayUser()中完成,该行可以直接删除 - 直接用
open()打开文件后没有做异常处理,一旦程序中途崩溃容易出现数据未写入、文件未关闭的问题,推荐用with上下文管理器处理文件操作
修复后代码
display模块
# display.py def displayUser(): name = input("Your name: ") age = input("Your age: ") email = input("Email: ") return name, age, email
main模块
# main.py import menu import display s = menu.optionMenu() if s == 1: # 接收用户输入的三个字段 name, age, email = display.displayUser() # 用with上下文管理器自动处理文件关闭,加utf-8编码避免乱码 with open("newmember.txt", "a", encoding="utf-8") as f: # 把所有要保存的内容拼接为单个字符串后写入,末尾加换行区分不同用户记录 f.write(f"{name},{age},{email}\n") print("Data is saved. Thank you!")
注意事项
- 写入内容时如果有多个字段,必须先拼接为单个字符串再传给
write(),禁止直接传入多个变量作为参数 - 建议用逗号、制表符等统一分隔符区分不同字段,后续读取文件时可以直接按分隔符拆分数据
- 你附上的三个模块结构示意图可辅助确认模块引用逻辑,本次修复完全适配你当前的模块拆分规则
内容的提问来源于stack exchange,提问作者rae
相关产品推荐
相关产品推荐

