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

Python用户创建与入库程序无响应问题排查求助

用户问题

我正在开发一款创建新用户并将其添加至数据库(DB)的程序,数据结构定义为data = {'name': name, 'username': username... 'unique_id' = unique_id...}。目前程序运行至某环节后出现无响应情况,既不输出内容也不终止运行。我添加了打印语句仍无法定位问题根源,以下是完整代码,恳请协助排查解决该无响应问题:

class NewUser:

    def __init__(self, name: str, username: str, email: str, age: int, sex: str):

        self.name = name
        self.username = username
        self.non_verified_email = email
        self.age = age
        self.sex = sex
    
        print('got data')

        self.finish_data()

    def unique_id(self):
    
        print('get id')

        return users.get_unique_id(self.username)

    def verify_email(self):

        print('email verified')

        return self.non_verified_email

    def adultness(self):
    
        print('inside')

        if self.age >= 18:

            print('adult')
            return True

        else:
            
            print('child')
            return False

    def finish_data(self):

        self.id = self.unique_id()
        self.verified_email = self.verify_email()
        self.adult = self.adultness()

        self.data = {
            'name': self.name,
            'username': self.username,
            'us_id': self.unique_id,
            'email': self.verified_email,
            'age': self.age,
            'adult': self.adult,
            'sex': self.sex
        }

        print(self.data)
        self.add_to_DB()

    def add_to_DB(self):

        print('adding to DB')
        users.add_new_user(self.data)
class UserDB:

    def __init__(self):

        self.users = []

    def add_new_user(self, data):

        self.users.append(data)

    def get_unique_id(self, username):
    
        n = 0
        change = True

        while change:
        
            n += 1

            new_id = '@' + username + str(n)

            for user in self.users:

                for us_id in user.values():

                    if us_id == new_id:

                        change = True
                        break

                    else:

                        return str(new_id)    

users = UserDB()

us1 = ''
us2 = ''
us3 = ''

us = [us1, us2, us3]

for i in range(2):

    us[i] = NewUser(input('name'), input('username'), input('email'), int(input('age')), input('sex'))
问题排查与修复

程序无响应的核心原因是**UserDB.get_unique_id方法的死循环逻辑错误**,同时存在一处变量赋值错误,具体问题和修复方案如下:

1. get_unique_id方法的逻辑漏洞

原方法存在两个致命问题:

  • 内层循环中,只要第一个用户的某个值不匹配就直接return new_id,完全没有遍历检查所有用户的ID,会导致ID重复
  • 当发现ID重复时,仅设置change = True但未跳出内层循环,且初始change = True会让外层while循环无限执行,直接造成程序卡死

修复逻辑:

  • 改为无限循环,直到生成不重复的ID为止
  • 针对每个新生成的ID,遍历所有已存在用户的us_id字段做完整检查,确认无重复后再返回

2. NewUser.finish_data的赋值错误

原代码中'us_id': self.unique_id是把方法对象赋值给了us_id,而非调用方法获取的ID值,应改为'us_id': self.id(或直接调用self.unique_id())

修复后的完整代码

NewUser类

class NewUser:
    def __init__(self, name: str, username: str, email: str, age: int, sex: str):
        self.name = name
        self.username = username
        self.non_verified_email = email
        self.age = age
        self.sex = sex
    
        print('got data')
        self.finish_data()

    def unique_id(self):
        print('get id')
        return users.get_unique_id(self.username)

    def verify_email(self):
        print('email verified')
        return self.non_verified_email

    def adultness(self):
        print('inside')
        if self.age >= 18:
            print('adult')
            return True
        else:
            print('child')
            return False

    def finish_data(self):
        self.id = self.unique_id()
        self.verified_email = self.verify_email()
        self.adult = self.adultness()

        self.data = {
            'name': self.name,
            'username': self.username,
            'us_id': self.id,  # 修复:赋值为已获取的ID而非方法对象
            'email': self.verified_email,
            'age': self.age,
            'adult': self.adult,
            'sex': self.sex
        }

        print(self.data)
        self.add_to_DB()

    def add_to_DB(self):
        print('adding to DB')
        users.add_new_user(self.data)

UserDB类与执行代码

class UserDB:
    def __init__(self):
        self.users = []

    def add_new_user(self, data):
        self.users.append(data)

    def get_unique_id(self, username):
        n = 0
        while True:
            n += 1
            new_id = '@' + username + str(n)
            # 仅检查用户字典中的us_id字段,避免误判其他字段
            duplicate = False
            for user in self.users:
                if user.get('us_id') == new_id:
                    duplicate = True
                    break
            if not duplicate:
                return new_id    

users = UserDB()

us = ['', '', '']
for i in range(2):
    us[i] = NewUser(input('name'), input('username'), input('email'), int(input('age')), input('sex'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:13:21