Ошибка KeyError: 'id'

Dv1zzz

Новичок
Пользователь
Янв 28, 2024
1
0
1
Ошибка в коде
Система Windows
Версия Python (3.11.1)
Код:
Python:
import vk_api
import random
import time
import datetime

token = "Имеется"
vk_session = vk_api.VkApi(token=token)

from vk_api.longpoll import VkLongPoll, VkEventType
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()

now = datetime.datetime.now()
timeA = now.hour

class User:
    def __init__(self,id,uid,money,power):
        self.id = id
        self.uid = uid
        self.money = money
        self.power = power

def save_bd(users):
    lines = []
    for user in users:
        lines.append(f'"id" : {user.id}, "uid" : {user.uid}, "money" : {user.money}, "power" : {user.power}')
    lines = '\n'.join(lines)
    with open("data.txt", "w", encoding = 'utf-8') as file:
        file.write(lines)
        file.close()

def read_bd():
    users = []
    with open("data.txt", "r", encoding = 'utf-8') as file:
        lines = [x.replace('\n', '') for x in file.readlines()]
        file.close()
    for line in lines:
        line = eval('{' + line + "}")
        if line != '{}':
            users.append(User(id = line['id'], uid = line['uid'], money = line['money'], power = line['power']))
    return users

Ошибка:
Python:
line 42, in read_bd
    users.append(User(id = line['id'], uid = line['uid'], money = line['money'], power = line['power']))
                           ~~~~^^^^^^
KeyError: 'id'
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Я бы попытался исправить, но для хранения данных в таком виде однозначно проще использовать json, чем изобретать велосипед

Python:
from dataclasses import dataclass, asdict
import json

@dataclass
class User:
    # Аналогично твоему созданию класса
    id: int
    uid: int
    money: int
    power: int

def save_bd(users, path="data.json"):
    # Преобразуем все объекты в словари
    lines = [asdict(user) for user in users]
    # Сохраняем пользователей в файл
    with open(path, "w", encoding="utf-8") as file:
        json.dump(lines, file, ensure_ascii=False)

def read_bd(path="data.json"):
    # Читаем файл
    with open(path, "r", encoding="utf-8") as file:
        lines = json.load(file)
    # Из каждой строки создаем объект пользователя
    users = [User(**line) for line in lines]
    return users

# Пример использования
if __name__ == "__main__":
    # Создаем список пользователей
    users = [
        User(1111, 1, 1000, 100),
        User(2222, 2, 3000, 200),
        User(3333, 3, 500, 1000),
    ]
    # Сохраняем
    save_bd(users)
    # Читаем
    data = read_bd()
    print(data)
 
  • Мне нравится
Реакции: Dv1zzz

Форум IT Специалистов