在 Python 中循环迭代,直到到达列表末尾

Iterate in Python with a loop until the end of the list is reached

我正在做一个项目,我想从 API (Strava) 中提取一长串数据并将它们放入 MySQL 数据库中(代码中未显示)。 API 有一些限制,它们不允许每个请求提取超过 200 条记录。因此,我需要找到一种方法来迭代结果,但在到达列表末尾时停止(它永远不会 returns 完全为空,也不会出错,无论我拉了多少页) .

所以,我定义了一个从 API 中提取数据的函数,JSON 输出中的第一个键是 effort_count,它等于列表中的条目数.我尝试在我构建的循环中使用该函数中的数字,以使用该函数遍历列表。

import urllib2
import json 

strava_api='xxxxxxx'
def strava(segment_id,page,per_page):

    access_token = strava_api
    url='https://www.strava.com/api/v3/segments/' + str(segment_id) +'/leaderboard' +'?&access_token=' + access_token       

    final_url=url + "&page=" + str(page) + "&per_page=" + str(per_page)
    json_obj=urllib2.urlopen(final_url)

    data = json.load(json_obj) 
    effort_count=data['effort_count']

counter = 1
max_page = effort_count/200+1
for counter in range (1,max_page):
    strava(894142,counter,200) # 894142 is an existing segment and 200 is the max number of records displayed
    counter = counter + 1

然而,当我 运行 这个时,我得到 'effort_count' 未定义的错误。这是因为无法在此循环中使用函数中的变量吗?有解决方法吗?

ps我在编码方面还很陌生,所以很可能我完全采用了错误的方法。

确实effort_count没有在全局范围内定义。

您可以通过在您的方法开始时声明它 global 来解决这个问题,例如

def strava(segment_id,page,per_page):
    global effort_count

    access_token = strava_api

但是您仍然遇到在调用您的方法之前访问 effort_count 的问题。

您还应该在脚本开始时将其初始化为一些合理的默认值。