使用Python跳过Excel工作簿中空工作表的实现问题
问题原因
- Python不允许数字开头的变量名,你定义的
24avrg会直接触发语法错误,被裸except捕获后直接跳过,这是无输出的核心原因之一 - 你当前使用的裸
except会捕获所有类型的异常,包括非空工作表读取后出现的"Time"列不存在、计算逻辑错误等问题,所有异常都直接跳过,自然不会返回结果 - 计算得到的结果没有存储到循环外的容器中,循环结束后变量会被覆盖,无法拿到最终输出
- 没有显式判断工作表是否为空,空表读取后执行后续索引、计算逻辑也会触发异常被跳过
解决方案
你可以选择「跳过空工作表」或者「空工作表返回0值」两种处理逻辑,参考代码如下:
# 初始化字典存储每个工作表的计算结果 result = {} for sheet in sheet_names: try: # 读取当前工作表 traffic_data = pd.read_excel(file_path, sheet_name=sheet) # 显式判断是否为空工作表 if traffic_data.empty: # 方案1:空表直接跳过,不需要空表记录就启用这行,注释下方赋值逻辑 # continue # 方案2:空表返回0值,不需要就注释这行启用上面的continue result[sheet] = 0 continue # 非空表执行后续计算 traffic_data2 = traffic_data[traffic_data["Time"] == "00-24"] avrg_24 = traffic_data2 / 24 # 存储当前工作表的计算结果 result[sheet] = avrg_24 # 只捕获读取Excel相关的异常,不要吞掉计算逻辑的错误方便排查问题 except (ValueError, IOError) as e: # 读取失败的表也按空表处理,存0或者跳过都可以 result[sheet] = 0 pass
结果调用
计算完成后你可以直接从result字典中取对应工作表的结果:
- 非空工作表返回对应的计算DataFrame
- 空/读取失败的工作表返回0值
如果选了跳过空表的逻辑,最终result里只会保留有效工作表的计算结果。
内容的提问来源于stack exchange,提问作者Kimchi
相关产品推荐
相关产品推荐

