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

Python中使用类属性存储用户数据并保存至CSV的异常问题

问题解决:CSV写入对象地址的修复及代码优化

问题原因

你看到的<__main__.User object at 0x...>是Python对象的默认字符串表示,因为csv.writer不知道如何处理自定义的User对象,只能输出它的内存地址。self参数在这里没有问题,你的User类初始化逻辑是正确的。

修复方案及优化代码

关键修改点

  • 给User类添加方法,返回可写入CSV的属性序列
  • 写入CSV时,遍历user_list,将每个对象转换为属性列表
  • 修复菜单递归调用的问题(原代码的return(menu())会导致递归嵌套,易引发栈溢出)
  • 增加CSV表头,让输出文件更规范

修改后的代码:

import csv

user_list = []

class User:
    def __init__(self, first, last):
        self.first = first
        self.last = last
        self.email = first + '.' + last + '@expressdelivery.com'
    
    # 新增方法:返回CSV行数据
    def to_csv_row(self):
        return [self.first, self.last, self.email]

def menu():
    while True: 
        print("[1]. Add/remove/update: user to the system.")
        try:
            option = int(input("Choose from the menu: "))
            if option == 1:
                # 创建User对象并添加到列表
                new_user = User(first=input("Name: "), last=input("Last: "))
                user_list.append(new_user)
                
                # 写入CSV文件
                with open('User.csv', 'w', newline='') as file:
                    writer = csv.writer(file)
                    # 写入表头
                    writer.writerow(["First Name", "Last Name", "Email"])
                    # 遍历用户列表,写入每个用户的属性
                    for user in user_list:
                        writer.writerow(user.to_csv_row())
                
                print("用户已添加并保存")
                # 继续循环显示菜单,不需要递归调用menu()
                continue
            else:
                print("Program quits")
                break
        except ValueError:
            # 捕获输入非数字的错误,比裸except更精准
            print("请输入有效的数字选项")
        except Exception as e:
            print(f"发生错误: {str(e)}")

menu()

额外说明

  1. newline=''参数:在Windows系统下写入CSV时避免出现多余空行,保证跨平台兼容性。
  2. 精准异常捕获:原代码的except:会捕获所有异常,改为针对性捕获ValueError处理输入错误,其他异常单独处理更便于调试。
  3. 避免递归调用:原代码的return(menu())会不断嵌套调用函数,多次操作后会触发栈溢出错误,直接用continue回到循环开头即可。

内容的提问来源于stack exchange,提问作者Gino Chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:41:01