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

时间:2016-11-22 12:06:19

标签: python for-loop iterate

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

因此,我定义了一个从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我在编码方面很陌生,所以我很可能完全采用错误的方法。

1 个答案:

答案 0 :(得分:0)

确实effort_count未在全球范围内定义。

您可以通过在方法开头声明global来解决此问题,例如

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

    access_token = strava_api

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

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