Try Except处理API请求异常:遇HTTPError填充0并继续下一个ID请求
问题修复方案
你的核心问题是异常触发时未递增索引i,导致循环一直卡在同一个ID上,反复抛出异常并填充错误值。以下是符合需求的修正代码:
import requests new_budget = [] new_revenue = [] i = 42 start_time = time.time() while len(new_budget) < 20: try: movie_id = dfbudget['id'].iloc[i] response = tmdb.Movies(movie_id).info() # 提取预算和收入,API无对应字段时默认返回0 new_budget.append(response.get('budget', 0)) new_revenue.append(response.get('revenue', 0)) except requests.HTTPError: # 遇到HTTP错误时填充0 new_budget.append(0) new_revenue.append(0) except Exception as e: # 捕获其他异常并记录,避免程序崩溃 print(f"处理ID {dfbudget['id'].iloc[i]}时出错: {str(e)}") new_budget.append(0) new_revenue.append(0) finally: # 无论成功失败,都推进到下一个ID i += 1
关键优化说明:
- 精准捕获异常:不再用裸
except隐藏所有错误,只针对HTTPError做指定处理,其他异常单独捕获记录,方便排查问题。 - finally块确保索引递增:不管请求成功还是触发异常,都会执行
i +=1,彻底避免循环卡在同一个ID上的问题。 - 安全取值方式:用
response.get()替代直接键取值,API返回缺少目标字段时自动返回0,避免额外触发KeyError。 - 变量名规范:将
id改为movie_id,避免和Python内置函数id()冲突。
内容的提问来源于stack exchange,提问作者Mohamed Atef
相关产品推荐
相关产品推荐

