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

Python脚本无限循环故障排查:PDF数据分组代码求助

解决Python字典分组代码的无限循环问题

我是编程纯新手,仅在Codecademy学习过Python课程。目前为所在公司编写一款可生成可填写PDF表单的小脚本,后续还需将表单数据导入matplotlib进行分析。我已完成PDF表单生成的基础部分,正在编写用于提取PDF数据的脚本,但其中这段分组键值对的代码陷入了无限循环,我无法理解原因,恳请各位提供帮助!

补充说明:data是从PDF表单中提取的包含特定键值对的字典,我正尝试通过下述代码对其中的键进行分组。

原代码:

switch = 1
ends_counter = 1
extracted_calibre_data = {}
extracted_calibre_data_subdict = {}
while switch != 0:
    extracted_calibre_test = extracted_calibre_data.copy()
    for key in data:
        letter_check = ["e", "c"]
        if key[0] == letter_check[0]:
            if key[1] == str(ends_counter):
                if key[2] == letter_check[1]:
                    extracted_calibre_data_subdict[key[3]+key[4]] = data[key]
                else:
                    continue
            else:
                continue
        else:
            continue
        extracted_calibre_data[ends_counter] = extracted_calibre_data_subdict
        ends_counter = ends_counter + 1
        if extracted_calibre_test == extracted_calibre_data:
            switch = 0
        else:
            continue

核心问题分析

  1. 循环退出逻辑完全失效:
    switch的赋值仅在找到符合条件的键时才会触发判断。如果某次while循环遍历data时没有匹配ends_counter的键,就不会执行退出判断,switch始终为1,直接导致无限循环。
  2. 子字典未重置:
    extracted_calibre_data_subdict是全局变量,每次循环不会清空,导致后续分组会包含之前所有分组的数据,同时重复赋值给extracted_calibre_data的不同键。
  3. 计数器递增时机错误:
    每次找到一个符合条件的键就递增ends_counter,而非处理完同一组(同一ends_counter值)的所有键后再递增,分组逻辑完全混乱。

修复后的代码

我们简化逻辑,直接遍历所有键按规则归类,彻底避免冗余的while循环:

extracted_calibre_data = {}
letter_check = ["e", "c"]

for key in data:
    # 跳过格式不符合要求的键
    if len(key) < 5:
        continue
    if key[0] != letter_check[0] or key[2] != letter_check[1]:
        continue
    
    # 转换分组编号为整数,跳过无效格式
    try:
        group_num = int(key[1])
    except ValueError:
        continue
    
    # 生成子字典的键
    sub_key = key[3] + key[4]
    
    # 自动创建新分组(如果不存在)
    if group_num not in extracted_calibre_data:
        extracted_calibre_data[group_num] = {}
    # 添加键值对到对应分组
    extracted_calibre_data[group_num][sub_key] = data[key]

修复方案优势

  • 去掉冗余的循环控制变量,一次遍历完成分组,逻辑清晰易维护。
  • 每个分组自动创建独立子字典,避免旧数据残留。
  • 增加格式校验和异常处理,避免因键格式错误导致崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:51:14