【发布时间】: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