You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中for循环仅返回列表最后一个URL数据的问题修复求助

Flask接口仅返回最后一个URL数据的问题修复

问题描述

创建了包含多个服务URL的列表,通过Flask接口轮询这些URL的/info接口获取JSON数据,但当前代码仅返回列表最后一个URL的信息,期望展示所有URL对应的Git分支、提交ID、时间等数据。

错误原因

  1. 每次循环中直接赋值data,会覆盖之前URL的结果,最终仅保留最后一次循环的内容
  2. 提前调用了req_info()函数,在Flask服务启动前执行会引发错误
  3. 未处理请求异常(如内网HTTPS证书问题、连接超时、JSON解析失败),容易导致接口崩溃
  4. 非200状态码的URL未做处理,可能导致data未定义引发报错

修复后的代码

from flask import Flask, request
import requests

app = Flask(__name__)
urls = [
    'https://192.168.1.6:8080/info',
    'https://192.168.1.5:8080/info',
]

@app.route('/dev', methods=['GET'])
def req_info():
    # 初始化列表存储所有URL的结果
    data_list = []
    for url in urls:
        try:
            # 内网HTTPS通常是自签证书,添加verify=False跳过验证(根据实际情况调整)
            r = requests.get(url, verify=False, timeout=5)
            if r.status_code == 200:
                resp = r.json()
                resp_git = resp['git']
                resp_git_commit = resp_git['commit']
                # 拼接当前URL的信息
                item = (
                    f"URL: {url}<br>"
                    f"Branch: {resp_git['branch']}<br>"
                    f"Commit: {resp_git_commit['id']}<br>"
                    f"Time: {resp_git_commit['time']}"
                )
                data_list.append(item)
            else:
                data_list.append(f"URL: {url}<br>请求失败,状态码: {r.status_code}")
        except Exception as e:
            # 捕获所有请求相关异常,避免接口崩溃
            data_list.append(f"URL: {url}<br>请求异常: {str(e)}")
    # 用两个换行分隔不同URL的结果
    return '<br><br>'.join(data_list)

if __name__ == '__main__':
    app.run()

修复说明

  • 结果累加:用列表data_list存储每个URL的结果,最后通过join合并,避免覆盖之前的内容
  • 移除无效调用:删除了提前执行的req_info(),该调用在Flask服务未启动时执行会报错
  • 异常处理:添加try-except捕获请求异常,包括证书问题、超时、JSON解析错误等,保证接口稳定
  • 状态码处理:对非200状态码的URL添加提示信息,避免遗漏异常情况
  • 简化解析:使用r.json()直接解析响应JSON,比json.loads(r.text)更简洁高效
  • 格式优化:用<br><br>分隔不同URL的结果,符合期望的展示格式

内容的提问来源于stack exchange,提问作者kotich-io

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:39:23