Ошибка записи в файл: int' object is not subscriptable

Код:

def new_dict(self):
     file = open('C:/Users/vlodko/Desktop/PYTHON_WORK/base.txt', 'w')

     for i in range(self.num_dict):
           print("People №", i)
           nam = str(input("Person Name: "))
           sur = str(input("Person Surname: "))
           age = int(input("Person age: "))
           color = str(input("Person Lovely color: "))
           self.dict_1[i] = {
               "Name": nam,
               "Surname": sur,
               "Age": age,
               "Lovely color": color}
           file.write("Name: "+nam[i]+'\n')
           file.write("Surname: " + sur[i]+'\n')
           file.write("Age: " + age[i]+'\n')
           file.write("Color: " + color[i]+'\n')
           file.write(self.c+'\n')
           file.close()

Когда в словарь входит 2+ человека получаю ошибку file.write("Age: " + age[i]+'\n') int' object is not subscriptable Как это все правильно записать в файл?


Ответы (1 шт):

Автор решения: CrazyElf
age = int(input("Person age: "))
...
file.write("Age: " + age[i]+'\n')

В age у вас целое число, что вы пытаетесь сделать, когда берёте от числа [i]?

На самом деле и в остальных строках вы непонятно что делаете. Вы перебираете символы строк с помощью [i], при этом значение i у вас никак не коррелирует с длиной этих строк, я не понимаю, что вы вообще тут пытаетесь сделать.

Возможно, вы хотите записать элементы словаря, который заполняете, тогда можно записывать их либо из текущих переменных:

       file.write("Name: "+ nam+'\n')
       file.write("Surname: " + sur+'\n')
       file.write("Age: " + str(age)+'\n')
       file.write("Color: " + color+'\n')

Либо из элементов самого словаря:

       file.write("Name: "+self.dict_1[i]["Name"]+'\n')
       file.write("Surname: " + self.dict_1[i]["Surname"]+'\n')
       file.write("Age: " + str(self.dict_1[i]["Age"])+'\n')
       file.write("Color: " + self.dict_1[i]["Lovely color"]+'\n')

P.S. У file.close() нужно уменьшить табуляцию, у вас файл закрывается на каждой итерации цикла, нужно вынести закрытие файла на тот же уровень, что и for.

Но ещё лучше использовать такую конструкцию и не вызывать file.close() вообще:

with open('C:/Users/vlodko/Desktop/PYTHON_WORK/base.txt', 'w') as file:
   for ...
→ Ссылка