Python调用omdb模块生成列表时仅追加最后一个值的问题
搞定你的OMDB电影详情列表问题
嘿,我一眼就看出你为啥列表里只留最后一条数据了——十有八九是列表初始化的位置不对,或者循环里没正确用append()而是直接覆盖变量了!
先把你的代码补全并修复好:
from pprint import pprint import omdb def getdetails(d2): pprint.pprint(d2) # 重点!要在循环外面先把结果列表初始化好 movie_details = [] for title_movies in d2.keys(): try: # 获取单部电影的详情数据 movie_data = omdb.get(title=title_movies, timeout=5) # 先检查下有没有拿到有效数据,再添加到列表里 if movie_data and 'error' not in movie_data: movie_details.append(movie_data) else: print(f"糟了,拿不到《{title_movies}》的详情哦") except Exception as e: print(f"请求《{title_movies}》的时候出问题了:{str(e)}") return movie_details
为啥之前会出错?
你之前的代码估计踩了这两个坑之一:
- 把列表初始化(
movie_details = [])放在了循环里面:那每次循环都会把列表清空重开,最后自然只剩最后一次的结果。 - 直接用
movie_details = movie_data代替append():这不是往列表里加元素,是直接把变量换成了单条电影数据,之前的内容全丢了。
给你加俩小优化
- 加了异常捕获:网络抽风、API限频或者电影名不对的时候,代码不会直接崩,还能告诉你哪出问题了。
- 校验返回结果:OMDB找不到电影的时候会返回带
error的字典,提前过滤掉这些无效数据,后面用的时候就不会踩坑啦。
内容的提问来源于stack exchange,提问作者spider22
相关产品推荐
相关产品推荐

