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
相关产品推荐
相关产品推荐

