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

Python使用自定义类实现电话簿lookup查询报错问题求解

问题解决

错误原因

  1. 没有持久存储联系人数据:你当前只是把联系人实例赋值给了每次循环都会重新生成的临时列表segment的元素,add操作结束后本次循环的segment就会被销毁,后续lookup操作根本拿不到之前添加的联系人数据
  2. lookup逻辑错误:你直接读取输入的姓名字符串的number属性,字符串本身不存在该属性,自然会报错

修复后代码

class People:
    def __init__(self, name, number):
        self.name = name
        self.number = number

def main():
    # 用字典存储姓名到联系人实例的映射,全局生效
    contact_map = {}
    while True:
        command = input('phoneBook> ')
        segments = command.strip().split()
        if not segments:
            print("有效命令:add 姓名 手机号 / lookup 姓名 / quit")
            continue
        cmd = segments[0]
        if cmd == 'add':
            if len(segments) != 3:
                print("add命令用法:add 姓名 手机号")
                continue
            name, phone = segments[1], segments[2]
            contact_map[name] = People(name, phone)
            print(f"已添加联系人 {name},手机号:{contact_map[name].number}")
        elif cmd == 'lookup':
            if len(segments) != 2:
                print("lookup命令用法:lookup 姓名")
                continue
            name = segments[1]
            if name in contact_map:
                print(f"{name} 的手机号:{contact_map[name].number}")
            else:
                print(f"联系人 {name} 不存在")
        elif cmd == 'quit':
            print("程序退出")
            break
        else:
            print("未知命令,支持的命令:add、lookup、quit")

if __name__ == '__main__':
    main()

优化建议

  • 命名规范:Python类名默认使用大驼峰格式,原people改为People更符合通用编码规范
  • 异常兼容:新增了命令格式校验、不存在的联系人查询提示,避免程序直接崩溃
  • 功能扩展:可以基于现有contact_map扩展删除联系人、修改手机号、批量导入导出联系人等功能
  • 持久化存储:如果需要重启程序后仍保留联系人数据,可以把contact_map的内容序列化写入本地json、csv文件,程序启动时再读取加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:05