【问题标题】:Python JSON KeyError for key that is not missing in object being parsed [closed]正在解析的对象中未丢失的键的 Python JSON KeyError [关闭]
【发布时间】:2015-10-12 15:19:02
【问题描述】:

我正在使用 Python (2.X) 抓取并解析从 RiotGames LoL API 获取的 JSON 数据,但遇到了一个奇怪的错误。

我正在加载 json 数据并通过 attr 读取数据 attr,这非常好,直到我遇到某个 attr,该 attr 显然在我试图从中提取它的对象中,但让 Python 尽可能抛出 KeyError在下面的屏幕截图中可以看到。

这是发生错误的代码n-p。如您所见,我打印了对象(出于调试目的),然后解析了所有 attr,它工作正常,但由于未知原因在 attr 'doubleKills' 处引发 KeyError。希望大家帮忙^^

def parseJSON(self, jsonDump):
    matchDetailDict =  dict()
    jsonobj = json.loads(jsonDump)

    matchId = jsonobj['matchId']
    tmpMatch = Match()
    tmpMatch.matchID = matchId

    tmpMatch.creationDate = jsonobj['matchCreation']
    tmpMatch.matchDuration = jsonobj['matchDuration']

    for participant, participantId in zip(jsonobj['participants'], jsonobj['participantIdentities']):
        stats = participant['stats']
        print stats
        tmpStats = MatchPlayerStats()
        tmpStats.playerID = participantId['player']['summonerId']
        tmpStats.matchID = matchId
        tmpStats.winner = stats['winner']
        tmpStats.kills = stats['kills']
        tmpStats.deaths = stats['deaths']
        tmpStats.assists = stats['assists']
        tmpStats.kda = (tmpStats.kills + tmpStats.assists)*1.0/max(tmpStats.deaths, 0.5) 
        tmpStats.visionWardsBoughtInGame = stats['visionWardsBoughtInGame']
        tmpStats.sightWardsBoughtInGame = stats['sightWardsBoughtInGame']
        tmpStats.championID = participant['championId']
        tmpStats.doubleKills = participant['doubleKills'] #KeyError here!
        tmpStats.firstBloodAssist = participant['firstBloodAssist']
        tmpStats.firstBloodKill = participant['firstBloodKill']
        tmpStats.killingSprees = participant['killingSprees']
        tmpStats.wardsKilled = participant['wardsKilled']
        tmpStats.wardsPlaced = participant['wardsPlaced']
        tmpStats.unrealKills = participant['unrealKills']

        matchDetailDict[tmpStats.playerID] = tmpStats

    tmpMatch.playerStats = matchDetailDict
    return tmpMatch

【问题讨论】:

  • try: .. except KeyError: print list(participant) 包裹它——看看里面有什么?

标签: python json parsing keyerror


【解决方案1】:

您发布的终端上的 JSON 似乎来自 stats,但您正尝试使用 participant 上的密钥。

print 'doubleKills' in stats.keys()

应该评估为True

【讨论】:

  • OMFG...我已经盯着代码看了很长一段时间了..我怎么可能没有看到..有时候你需要的只是别人评估你的代码我猜。 . 谢谢你是对的,应该是 stsats[key] ^_^
  • 不止一次发生在我身上:D。就像校对一样!
猜你喜欢
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多