【问题标题】:Why does my for loop stop before the loop is finished?为什么我的 for 循环在循环完成之前停止?
【发布时间】:2021-03-06 19:31:39
【问题描述】:

我有一个 for 循环,它正在遍历包含大量嵌套字典的字典。当循环到达没有我正在寻找的密钥的条目时,它会停止。如何让它继续遍历所有其余数据?

在我的代码中,循环可以很好地完成游戏。 当我尝试获取所有游戏 ['odds'] 时,如果一个游戏没有赔率键,则循环停止,这最终给我一个键错误并且只打印出前四场比赛。

    results = requests.request("GET", url, headers=headers).json()
    games = results['results']
    for game in games:
        spread = game['odds']
        for line in spread:
            points = line['spread']['current']['home']
            print(points)

【问题讨论】:

标签: python dictionary for-loop


【解决方案1】:

将spread = game['odds'] 替换为spread = game.get('odds',[]) 以便spread 在没有'odds' 键时获得一个空列表,并且其余代码将正常运行。

【讨论】:

    【解决方案2】:

    我会假设它会因为KeyError 而停止。在这里,您有两种选择来克服它。

    dict().get()

    d = {}
    d.get('foo') #Returns None
    

    .get() 方法很方便,因为如果指定的键不存在,那么它将简单地返回 None。在您不想处理从天而降的错误的地方使用。

    尝试除外

    稍微复杂一点。

    try:
        raise ValueError('ya goofed m8')
    except ValueError:
        print('How the tables have turned...')
    

    这将侦听错误,然后在发生错误时执行一些代码 try 是您要侦听错误的代码。 except 是错误代码。

    【讨论】:

    • 这一半成功了,因为它最终导致了“'NoneType'对象不可迭代”错误。
    【解决方案3】:

    尝试这样做:

    results = requests.request("GET", url, headers=headers).json()
        games = results['results']
        for game in games:
            if(game['odds']):
                spread = game['odds']
                for line in spread:
                    points = line['spread']['current']['home']
                    print(points)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 2017-01-29
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多