El objeto no admite la indexación

Estoy creando un registro de trabajo en python donde un usuario puede ingresar una tarea o puede buscar una tarea por fecha. Mi solicitud inicial solicita al usuario que ingrese una tarea o una búsqueda por fecha. Si el usuario comienza buscando por fecha, el progtwig funciona correctamente y muestra todas las fechas. Si un usuario comienza agregando una tarea y luego buscando tareas por fecha, el progtwig muestra un ‘objeto que no admite error de indexación’. Creo que por alguna razón, la lista se está vaciando, pero no puedo, por mi vida, entender dónde o cuándo podría estar sucediendo esto. Aquí está el archivo de registro de trabajo principal:

import csv import re import datetime from task import Task from task_list import TaskList class Worklog(): def __init__(self): self.filename = "work_log.csv" self.tasklist = TaskList() self.tasklist.read_task_from_file(self.filename) def search_by_date(self): for d, i in enumerate(self.tasklist.dates()): print(d+1, ':', i) # while True: # datereq = input("Select Number To See Tasks For A Date").strip().lower() # try: # datereq = int(datereq) # return datereq # except ValueError: # print("Invalid Entry. Please try again") # continue def search_by_time(self): pass def exact_search(self): pass def pattern_search(self): pass def add_task(self): task = Task() task.input_task() task.input_minutes() task.input_notes() task.date = datetime.date.today() self.tasklist.app_task(task) self.tasklist.save_task_to_file(self.filename,task) def lookup_task(self): if len(self.tasklist.task_list) == 0: print("Your task log is empty.\n") input("Hit Enter to add a new task.") else: while True: lookup = input("Lookup by Date(D), Time(T), Exact Search(E) or Pattern(P): ") lookup.lower() if lookup == 'd': self.search_by_date() break elif lookup == 't': self.search_by_time() break elif lookup == 'e': self.exact_search() break elif lookup == 'p': self.pattern_search() break else: print("Sorry invalid option. Please try again") def start_message(self): while True: q = input("Add New Task(1) or Lookup Task(2) or Quit(3): ".strip().lower()) if q == "1": self.add_task() elif q == "2": self.lookup_task() elif q == "3": exit() else: print("Sorry that's an invalid entry. Please try again.") continue if __name__ == '__main__': log = Worklog() log.start_message() 

El error está apuntando a la función de fechas que se muestra a continuación junto con algunos de los otros métodos para mi clase “lista de tareas”. ¿Hay algún problema con la forma en que estoy indexando esta lista? O tengo razón en que la lista task_list se está restableciendo de alguna manera cuando el usuario entra en el segundo paso del bucle. Gracias:

  def app_task(self, task): self.task_list.append(task) def save_task_to_file(self,filename,task): with open(filename, 'a', newline="\n", encoding="utf-8") as csvfile: # creating a csv writer object csvwriter = csv.writer(csvfile, delimiter=",") # writing the data rows csvwriter.writerow([task.date, task.task, task.minutes, task.notes]) def read_task_from_file(self,filename): with open(filename, 'r') as csvfile: task_reader = csv.reader(csvfile, delimiter=',') for row in task_reader: task = Task() self.task_list.append(row) return self.task_list def dates(self): self.read_task_from_file("work_log.csv") dates = [] for row in self.task_list: date = row[0] if row[0] not in dates: dates.append(date) return sorted(dates) 

Nota: aquí hay un ejemplo de cómo se ve el archivo work_log.csv:

 2017-03-23,gardening,30,not really 2017-03-23,bowling,30,none 2017-03-23,bowling,90,none 2017-03-23,bowling,93,none 2017-03-23,baseball,2,none 2017-03-23,bowling,20,none 2017-03-23,base,0,jj 2017-03-23,bowling,33,none 

Agregado por la recomendación de Jake:

 def get_date(self): for row in self.task_list: d = row[0] return d def dates(self): dates = [] for row in dates: date = row.get_date() if date not in dates: dates.append(date) return sorted(dates) 

El problema parece ser donde se llama date = row[0] ; esto se debe a que en la row del bucle habrá un objeto de Task mientras esté iterando sobre self.task_list . En este caso, está intentando indexar un objeto de Task , que no está configurado para la indexación.

La solución simple para esto sería reemplazar la row[0] con row.date ; que accederá directamente al campo de date del objeto row , sin necesidad de preocuparse por la indexación en absoluto.