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

Python:For循环中结合If-Else语句过滤有效站点ID失败的问题

问题排查与解决方案

嘿,我来帮你搞定这个问题!你的核心问题在于判断空数组的条件用错了——空的resources字段是一个空列表对象[],既不是None,也不是字符串"[]",所以你之前的所有判断逻辑都没法正确筛选出非空的情况。

先拆解一下你之前的错误原因:

  • 条件1/3里用!= None或== None:空列表[]和None是完全不同的对象,所以这个判断永远会认为非空,导致所有站点ID都被加入列表。
  • 条件2/4里用== "[]"或!= "[]":你把列表和字符串做比较了,空列表不是字符串,所以这个判断也永远为真,同样会保留所有ID。

正确的解决方案

判断一个列表是否非空,最直接的方式是利用Python的布尔特性:空列表在布尔判断中会被视为False,非空列表则为True。或者也可以用len()函数检查长度是否大于0,两种方式都有效。

下面是修正后的完整代码:

import requests
import json

site_ids = [6, 5, 7, 1]
site_ids_with_alerts = []

for sid in site_ids:
    smtp_url = "my url"+str(sid)+"API endpoint"
    smtp_payload={}
    smtp_headers = {
        'Accept': 'application/json;charset=UTF-8',
        'Authorization': 'my stuff'
    }
    # 用requests内置的json()方法直接解析响应,更简洁
    smtp_response = requests.request("GET", smtp_url, headers=smtp_headers, data=smtp_payload, verify=False)
    smtp_json = smtp_response.json()
    
    # 正确的非空判断方式二选一即可
    # 方式1:直接判断列表是否为真
    if smtp_json['resources']:
        site_ids_with_alerts.append(sid)
    # 方式2:检查列表长度
    # if len(smtp_json['resources']) > 0:
    #     site_ids_with_alerts.append(sid)

print(site_ids_with_alerts)  # 现在会输出预期的[6, 5]

额外小提示

requests库的Response对象自带.json()方法,可以直接把响应体解析成JSON对象,不用自己手动调用json.loads(),能少写一行代码还更不容易出错~

内容的提问来源于stack exchange,提问作者Happy.Hartman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:37:27