瑞安航空航班数据爬虫UnboundLocalError问题排查与修复咨询
瑞安航空爬虫无航班时UnboundLocalError问题修复
问题原因
触发UnboundLocalError的核心原因是:departure_date、departure_flyout_times等变量仅在成功抓取到航班数据的分支中定义,当指定日期无航班时,这些变量从未被初始化,导致最后组装返回字典时无法找到变量引用。原代码的错误处理逻辑只考虑了赋值默认文本,但未提前初始化变量,属于变量作用域的基础问题。
修复方案
步骤1:提前初始化所有变量
在return_flight函数开头,先为所有需要用到的变量设置默认值(对应无航班的状态),确保无论是否抓取到航班,变量都有定义:
from datetime import datetime def return_flight(departure_date_str, return_date_str, origin, destination, adults): # 初始化去程变量(默认无航班状态) departure_date = datetime.strptime(departure_date_str, '%Y-%m-%d').strftime('%d %b') departure_flyout_times = 'N/A' arrival_flyout_times = 'N/A' departure_price = 'N/A' # 初始化返程变量(默认无航班状态) return_date = datetime.strptime(return_date_str, '%Y-%m-%d').strftime('%d %b') departure_flyback_times = 'N/A' arrival_flyback_times = 'N/A' return_price = 'N/A' # 原有的去程航班抓取逻辑(示例) try: # 当抓取到去程航班数据时,覆盖默认变量值 departure_flyout_times = 抓取到的去程起飞时间 arrival_flyout_times = 抓取到的去程到达时间 departure_price = 抓取到的去程价格 except: # 无航班时保留默认值 pass # 原有的返程航班抓取逻辑(示例) try: # 当抓取到返程航班数据时,覆盖默认变量值 departure_flyback_times = 抓取到的返程起飞时间 arrival_flyback_times = 抓取到的返程到达时间 return_price = 抓取到的返程价格 except: pass # 组装返回结果 return [ {'Departure': { 'date': departure_date, 'departure_time': departure_flyout_times, 'arrival_time': arrival_flyout_times, 'price': departure_price }}, {'Return': { 'date': return_date, 'departure_time': departure_flyback_times, 'arrival_time': arrival_flyback_times, 'price': return_price }} ]
步骤2:调整原有条件判断逻辑
将原代码第50-94行的if语句,修改为当抓取到有效航班数据时,覆盖提前初始化的变量值,而非在分支内定义新变量。这样无论是否存在航班,所有变量都处于已定义状态,不会触发未绑定错误。
验证修复结果
修复后三种场景均能返回符合预期的格式:
- 往返均有航班:正常返回航班时间与价格
- 无去程航班:去程字段统一显示
N/A,返程数据正常 - 无返程航班:返程字段统一显示
N/A,去程数据正常
内容的提问来源于stack exchange,提问作者Joseph Webster
相关产品推荐
相关产品推荐

