You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用try-except处理pymssql时,DataFrame仅拼接列表最后一项的问题

问题原因

你这段代码的核心问题是每次循环都会重新创建frames列表,覆盖之前存储的表数据,而且finally块在每轮循环都会执行,导致最终dfxilnex只保留了最后一次循环读取的表数据。

修正方案
  1. 先初始化一个空列表用来存储所有表的DataFrame
  2. 循环中成功读取表数据后,将其追加到列表中
  3. 循环结束后,一次性拼接所有表数据

修正后的代码:

# 初始化空列表存储所有表的DataFrame
frames = []
for i in Com_Tables:
    try:
        # 读取表数据并添加标识列,追加到frames列表
        df = pd.read_sql(f"SELECT * FROM {i}", conn).assign(ComId_Code = i)
        frames.append(df)
    except Exception as e:
        # 可选:打印读取失败的表名和错误信息,方便排查
        print(f"读取表 {i} 失败: {str(e)}")
        pass

# 循环结束后一次性拼接所有表数据
dfxilnex = pd.concat(frames, ignore_index=True)
额外说明
  • 添加ignore_index=True可以重置拼接后DataFrame的索引,避免索引重复
  • 把except:改成except Exception as e:,可以捕获并查看具体错误,方便排查读取失败的原因
  • 不要在循环内的finally块执行concat,否则每轮循环都会覆盖之前的拼接结果

内容的提问来源于stack exchange,提问作者ZulH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:40:35