在 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
的问题。
您还应该在脚本开始时将其初始化为一些合理的默认值。
我正在做一个项目,我想从 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
的问题。
您还应该在脚本开始时将其初始化为一些合理的默认值。