【问题标题】:TypeError: can't convert type 'str' to numerator/denominatorTypeError:无法将类型“str”转换为分子/分母
【发布时间】:2020-09-11 21:41:14
【问题描述】:

我的代码中有一些变量类型有问题。我现在得到的错误是:

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)

这是我的代码的 sn-p,可以为你们提供上下文:

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=2&varcd=0010042&Dim1=S3A" + year_code + \
                month_code + "&Dim2=" + city_code + "&Dim3=T&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=0010042&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"
    } ]
  }
} ]

【问题讨论】:

  • 您好,我的回答对您有帮助吗?
  • 有什么更新吗?你能解决这个问题吗?
  • 对不起,我正在度假,今天回来了。实际上,我遇到了类似这样的错误,我可能需要更多帮助才能让我的代码正常工作,我想我正在写一篇新文章..

标签: python json


【解决方案1】:

类型转换怎么样

valor_anual[int(data[0]['Dados'][json_date][0]['geodsg'])][int(year_code)]

【讨论】:

  • 我做了你指出的更改,我得到了错误:ValueError: invalid literal for int() with base 10: 'Viana do Castelo'
  • 这可能是因为“geodsg”是城市的名称(如 Viana do Castelo),它不能转换成整数..
  • @TiagoMendes valor_anual 是什么数据结构?
【解决方案2】:

如果没有完整的源代码,就不可能给出精确的解决方案,但是我怀疑你的问题是你试图取包含字符串元素的 valor_mensal_aux 的平均值。在将“valor”附加到列表之前尝试将其转换为整数:

valor_mensal_aux.append(int(data[0]['Dados'][json_date][0]['valor']))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2017-08-31
    • 2012-11-19
    • 2015-12-23
    相关资源
    最近更新 更多