#python #json
#python #json
Вопрос:
У меня возникли проблемы с некоторыми типами переменных в моем коде. Ошибка, которую я получаю сейчас, заключается в:
TypeError: can't convert type 'str' to numerator/denominator
Рассматриваемая строка кода следующая:
valor_anual[data[0]['Dados'][json_date][0]['geodsg']][year_code] = statistics.mean(valor_mensal_aux)
Вот фрагмент моего кода, чтобы дать вам, ребята, контекст:
valor_anual = [0][0]
for city_code in city_codes:
for year_code in year_codes:
valor_mensal_aux = []
for month_code in month_codes:
url_imob = Request(
"https://www.ine.pt/ine/json_indicador/pindica.jsp?op=2amp;varcd=0010042amp;Dim1=S3A" year_code
month_code "amp;Dim2=" city_code "amp;Dim3=Tamp;lang=PT", headers={'User-Agent': 'XYZ/3.0'})
json_date = year_code month_code
response = urlopen(url_imob)
data = json.loads(response.read())
valor_mensal_aux.append(data[0]['Dados'][json_date][0]['valor'])
valor_anual[data[0]['Dados'][json_date][0]['geodsg']][year_code] = statistics.mean(valor_mensal_aux)
python_imob = Imob(year_code, valor_anual[city_code][year_code], data['DataUltimoAtualizacao'],
data['Dados'][json_date]['geodsg'])
session.add(python_imob)
session.commit()
session.close()
imobs = session.query(Imob).all()
JSON, из которого я получаю данные, имеет следующую структуру:
[ {
"IndicadorCod" : "0010042",
"IndicadorDsg" : "Valor mediano de avaliação bancária (€/ m²) por Localização geográfica (Município - 2013) e Tipo de construção; Mensal - INE, Inquérito à avaliação bancária na habitação",
"MetaInfUrl" : "https://www.ine.pt/bddXplorer/htdocs/minfo.jsp?var_cd=0010042amp;lingua=PT",
"DataExtracao" : "2020-06-29T15:55:51.640 01:00",
"DataUltimoAtualizacao" : "2020-06-29",
"UltimoPref" : "Maio de 2020",
"Dados" : {
"202005" : [ {
"geocod" : "1701106",
"geodsg" : "Lisboa",
"dim_3" : "T",
"dim_3_t" : "Total",
"valor" : "3084"
} ]
}
} ]
Комментарии:
1. Привет, помог ли тебе мой ответ ниже?
2. Есть обновления? Вы смогли это исправить?
3. извините, чувак, я был в отпуске и вернулся сегодня. На самом деле, у меня возникли некоторые ошибки, подобные этой, и мне может понадобиться дополнительная помощь, чтобы заставить мой код работать, я думаю, что я делаю новый пост..
Ответ №1:
Как насчет приведения типов
valor_anual[int(data[0]['Dados'][json_date][0]['geodsg'])][int(year_code)]
Комментарии:
1. я внес изменения, на которые вы указали, и я получил ошибку: ошибка значения: недопустимый литерал для int() с основанием 10: ‘Виана-ду-Каштелу’
2. это может быть из-за того, что «geodsg» — это название городов (например, Виана-ду-Каштелу), и его нельзя преобразовать в целое число..
3. @TiagoMendes какая структура данных является valor_anual?
Ответ №2:
Невозможно дать точное решение без полного исходного кода, однако я подозреваю, что ваша проблема заключается в том, что вы пытаетесь использовать среднее значение valor_mensal_aux, которое содержит строковые элементы. Попробуйте преобразовать «valor» в целое число, прежде чем добавлять его в список:
valor_mensal_aux.append(int(data[0]['Dados'][json_date][0]['valor']))