Добрый день!
Я сталкиваюсь с одной проблемой от питоновского компилятора по распаковке объекта:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
40 mls_scc = LearnMaxLevelDataArray("school")
41
---> 42 for rowm, index in range(len(mls_scc)):
43
44 if row['gender'] == "M":
TypeError: cannot unpack non-iterable int object
Сама проблема заключается в том, что один цикл вложил внутри используемого цикла(касается остальных тех же циклов) и компилятор не может совместить один тип объекта с другим.
Пример кода(где возникает данная проблема):
i#Работа с данными для их анализа
ds = DatasetRead()
rdata = ReportDataRead()
rwb = ReportDataWorkBook()
rd = rwb.get_sheet_by_name('Report')
#Массивы для проверки соответствии при анализе
mlsb = LearnLevelBalanceArray()
msd = maxSalaryDataArray()
sgl = {}
for index, row in ds.iterrows():
#Производит выборку данных из датасета. Это - первый этап анализа данных по студентам с опытом работы.
#Если решение на русском языке, то расшифровка пола выпускника переводится на английский язык.
if row['gender'] == "M":
gender = "Муж"
if row['gender'] == "F":
gender = "Жен"
if 'profile' not in sgl:
sgl.update({'profile': {}})
if 'info' not in sgl['profile']:
sgl['profile'].update({'info': {}})
if 'degree' not in sgl['profile']['info']:
sgl['profile']['info'].update({'degree': {}})
sgl['profile']['gender'] = gender
sgl['profile']['education_work'] = {
'degree': row['degree_t'],
'specialisation': row['specialisation'],
'salary': row['salary']
}
if row['workex'] == "Yes":
mls_scc = LearnMaxLevelDataArray("school")
for rowm, index in range(len(mls_scc)):
if row['gender'] == "M":
input_ssc_level = rd[rowm[1][0][index]].value
if row['gender'] == "F":
input_ssc_level = rd[rowm[0][0][index]].value
maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
userlevelbalance = 100 - row['ssc_p']
if maxlevelbalance > userlevelbalance:
levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня
if maxlevelbalance < userlevelbalance:
levelbalance = userlevelbalance - maxlevelbalance
for rowms, index in mlsb.iterrows():
if levelbalance == rowms[index] or levelbalance > rowms[index]:
#Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень школьных знании, которого добился выпускник
sgl['profile']['info']['school'] = row['ssc_p']
mls_hsc = LearnMaxLevelDataArray("high")
for rowm, index in range(len(mls_hsc)):
if row['gender'] == "M":
input_ssc_level = rd[rowm[1][0][index]].value
if row['gender'] == "F":
input_ssc_level = rd[rowm[0][0][index]].value
maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
userlevelbalance = 100 - row['hsc_p']
if maxlevelbalance > userlevelbalance:
levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня
if maxlevelbalance < userlevelbalance:
levelbalance = userlevelbalance - maxlevelbalance
for rowms, index in mlsb.iterrows():
if levelbalance == rowms[index] or levelbalance > rowms[index]:
#Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
sgl['profile']['info']['highschool'] = row['hsc_p']
mls_mba = LearnMaxLevelDataArray("mba")
for rowm, index in range(len(mls_mba)):
if row['gender'] == "M":
input_ssc_level = rd[rowm[1][0][index]].value
if row['gender'] == "F":
input_ssc_level = rd[rowm[0][0][index]].value
maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
userlevelbalance = 100 - row['mba_p']
if maxlevelbalance > userlevelbalance:
levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня
if maxlevelbalance < userlevelbalance:
levelbalance = userlevelbalance - maxlevelbalance
for rowms, index in mlsb.iterrows():
if levelbalance == rowms[index] or levelbalance > rowms[index]:
#Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
sgl['profile']['info']['highschool'] = row['mba_p']
mls_estet = LearnMaxLevelDataArray("estet")
for rowm, index in range(len(mls_estet)):
if row['gender'] == "M":
input_ssc_level = rd[rowm[1][0][index]].value
if row['gender'] == "F":
input_ssc_level = rd[rowm[0][0][index]].value
maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
userlevelbalance = 100 - row['estet_p']
if maxlevelbalance > userlevelbalance:
levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня
if maxlevelbalance < userlevelbalance:
levelbalance = userlevelbalance - maxlevelbalance
for rowms, index in mlsb.iterrows():
if levelbalance == rowms[index] or levelbalance > rowms[index]:
#Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
sgl['profile']['info']['estet'] = row['estet_p']
mls_degree = LearnMaxLevelDataArray("degree")
for rowm, index in range(len(mls_degree)):
if row['gender'] == "M":
input_ssc_level = rd[rowm[1][0][index]].value
if row['gender'] == "F":
input_ssc_level = rd[rowm[0][0][index]].value
maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
userlevelbalance = 100 - row['degree_p']
if maxlevelbalance > userlevelbalance:
levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня
if maxlevelbalance < userlevelbalance:
levelbalance = userlevelbalance - maxlevelbalance
for rowms, index in mlsb.iterrows():
if levelbalance == rowms[index] or levelbalance > rowms[index]:
#Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
sgl['profile']['info']['degree'] = row['degree_p']
print(sgl)
Как правильно вложить циклы и объекты так, чтобы компилятор хорошо совместил один тип объекта с другим типом объекта, судя по описанию ошибки? Какие варианты предлагает Python?