Ошибка ключа для csvdictreader() не работает, когда параметр для заголовка столбца функции

#python #keyerror

#python #keyerror

Вопрос:

Это мой код, и я продолжаю получать ошибку ключа. Я уже открыл файл в своем коде инициализатора для своего класса, но проблема в том, что я продолжаю получать KeyError для этого файла. Я знаю, что это работает, когда я открываю файл внутри функции, но когда я открываю его вне функции, он не работает, и я получаю KeyError. Пожалуйста, дайте мне знать, если вам нужен полный код. Я не могу использовать pandas или любые другие модули для этого, кроме импорта csv. Я знаю, что с этим было бы проще 🙂

 
    def calc_avg(self, specific, filter, logic, threshold):
        '''calculates avg for the column determine by specific based off the filter parameters given by 
        filter, logic, threshold'''
        
        if isinstance(threshold, str):
            threshold = float(threshold)

       
        running_sum = 0
        running_count = 0
        
        for row in csv.DictReader(self.load_data):
            value = int(row[filter])
                
            if logic == 'lt' and value < threshold:
                include = True
            elif logic == 'gt' and value > threshold:
                include = True
            elif logic == 'lte' and value <= threshold:
                include = True
            elif logic == 'gte' and value >= threshold:
                include = True
            else:
                include = False

            if include:
                running_sum  = int(row[specific])
                running_count  = 1

            
        return (round(running_sum / running_count,2))

  

команда
print(csv_data.calc_avg("Length_of_stay", filter="SOFA", logic="lt", threshold="15"))

ошибка, которую я получаю, :

     value = int(row[filter])
KeyError: 'SOFA'
  
 Sample Data:

RecordID SAPS-I SOFA    Length_of_stay  
132539    6      1         5    
132540    16     8         8    
132541    21     11       19    
132545    17     2         4    
132547    14     11        6    
132548    14     4         9    
132551    19     8         6    
132554    11     0        17   

  

Полный код:

 class HWReader():
    
    def __init__(self, load_data):
        '''initializer that sets filename as a parameter that can be used within all functions'''
        
        self.load_data = open(load_data, "r")
        
    def get_saps(self, record_name):
        '''finds the saps score for a record name'''
        
        for row in csv.DictReader(self.load_data, delimiter = ','):
            if row['RecordID'] == record_name:
                return (row['SAPS-I'])

    def calc_avg(self, specific, filter, logic, threshold):
        '''calculates avg for the column determine by specific based off the filter parameters given by 
        filter, logic, threshold'''
        
        if isinstance(threshold, str):
            threshold = float(threshold)

        avg_file = csv.DictReader(self.load_data)

        running_sum = 0
        running_count = 0
        
        for row in avg_file:
            value = int(row[filter])
                
            if logic == 'lt' and value < threshold:
                include = True
            elif logic == 'gt' and value > threshold:
                include = True
            elif logic == 'lte' and value <= threshold:
                include = True
            elif logic == 'gte' and value >= threshold:
                include = True
            else:
                include = False

            if include:
                running_sum  = int(row[specific])
                running_count  = 1

            
        return (round(running_sum / running_count,2))

  

Комментарии:

1. Где определение? self.load_data

2. Я пошел дальше и добавил полный код, self.load_data является self.load_data = open(load_data, "r")

3. Для меня код работает отлично, не получая никаких ошибок.

4. Действительно? это так странно, он продолжает выдавать мне эту ошибку кода, и я не понимаю, почему это происходит.