如何用Python循环生成符合规则的OData请求URL?
OData请求URL生成的循环逻辑问题分析
问题背景
需要通过while或for循环生成符合以下规律的c、top、skip值,并逐行打印对应的OData请求URL(c为动态序号,无需创建pandas DataFrame):
| c | top | skip | 说明 |
|---|---|---|---|
| 1 | 1000 | 0 | 初始值 |
| 2 | 1001 | 2000 | top在上一行基础上加999 |
| 3 | 2001 | 3000 | top在上一行基础上加999 |
| 4 | 3001 | 4000 | top在上一行基础上加999 |
| ... | ... | ... | 后续行保持相同累加规律 |
当前实现的代码仅第一行输出正确,从第三行开始top和skip值出现错误,错误输出示例:
http://
: /sap/opu/odata/sap/ZRSO2_BKPF?$format=json&$top = 1000&$skip = 0
http://: /sap/opu/odata/sap/ZRSO2_BKPF?$format=json&$top = 1000&$skip = 2000
http://: /sap/opu/odata/sap/ZRSO2_BKPF?$format=json&$top = 2001&$skip = 3002
http://: /sap/opu/odata/sap/ZRSO2_BKPF?$format=json&$top = 4003&$skip = 6006
问题根源
原代码的核心逻辑存在两处错误:
- 循环变量定义错误:循环变量
c的步长设为1000,导致c取值为1、1001、2001...,完全偏离需求中c作为递增序号(1、2、3...)的设定 - 数值计算逻辑错误:非第一行的
top和skip直接用c和c+999赋值,没有遵循需求中top逐行累加999、skip为c*1000的规律
修正后的代码
url = "http://<ip>:<port>/sap/opu/odata/sap/ZRSO2_BKPF?$format=json&$" initial_top = 1000 total_requests = 10 # 需要生成的请求总数 def print_odata_url(top_val, skip_val): print(f'{url}top={top_val}&$skip={skip_val}') for c in range(1, total_requests + 1): if c == 1: print_odata_url(initial_top, 0) else: current_top = initial_top + (c - 2) * 999 current_skip = c * 1000 print_odata_url(current_top, current_skip)
代码说明
- 循环变量
c从1遍历到total_requests,对应需求中的序号 - 第一行直接使用初始
top=1000、skip=0 - 从第2行开始:
current_top通过初始值 + (当前序号-2)*999计算,实现每次累加999的规律current_skip直接取c*1000,符合需求中的数值规则
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

