#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. Действительно? это так странно, он продолжает выдавать мне эту ошибку кода, и я не понимаю, почему это происходит.