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

Python中while循环正常执行时嵌套for循环仅运行一次问题排查

问题描述

Python编写过程中出现异常:外层while循环可正常执行,但嵌套在while中的for循环仅运行一次,原始代码如下:

import os
import json
import csv
import pandas as pd
os.chdir("C:/Users/lchavan/Test 4")
df= "C:/Users/lchavan/Test 4"
dir_list = os.listdir(df)
for filename in os.listdir(df):
    with open(filename) as json_file:
        data = json.load(json_file)
        print(filename)
    i = 0
    while i >= 0:
        x = data[0]['created']
        if i < len(x):
            y = x[i]
            for k,v in y.items():
                if k == 'geomenter code hereetry':
                    z = y['geometry']['coordinates']
                    print (z)
        i+=1
        pass 
问题排查结果

代码存在4个直接导致异常的问题:

  1. while循环条件设置错误:i >= 0为恒真条件,i从0开始持续自增永远不会满足退出条件,属于无限死循环,会持续占用CPU资源空跑
  2. 键名拼写错误:判断键值时写的是geomenter code hereetry,是编辑代码时误插入了编辑器占位符,和实际要匹配的geometry键名完全不匹配,绝大多数场景下无法进入取坐标的逻辑,视觉上就表现为for循环仅运行一次
  3. 重复赋值冗余:x = data[0]['created']写在while循环内部,每次循环都会重复执行相同的赋值操作,无意义消耗性能
  4. 无循环终止逻辑:当i增长到大于等于len(x)后,没有设置break跳出循环的逻辑,i会持续无限自增

除此之外还有几处冗余/风险点:导入了csv、pandas库但全程未使用,定义了dir_list变量未调用,打开文件时未指定编码,未过滤目录下非JSON格式文件,容易触发读取报错。

修复后代码

直接用for循环迭代替代手动维护索引的while循环,从根源避免索引越界、死循环问题,同时修正拼写错误、补全异常防护:

import os
import json

os.chdir("C:/Users/lchavan/Test 4")
target_path = "C:/Users/lchavan/Test 4"

for filename in os.listdir(target_path):
    # 过滤非json文件,避免读取报错
    if not filename.endswith(".json"):
        continue
    # 显式指定文件编码,避免乱码
    with open(filename, "r", encoding="utf-8") as json_file:
        data = json.load(json_file)
        print(f"正在处理文件:{filename}")
    
    content_list = data[0]["created"]
    # 直接迭代元素,无需手动维护索引
    for item in content_list:
        for k, v in item.items():
            if k == "geometry":
                coordinates = item["geometry"]["coordinates"]
                print(coordinates)
注意事项
  • 遍历Python序列(列表、字典等)时,优先使用for直接迭代元素,尽量避免手动维护索引写while循环,能大幅降低死循环、索引越界的bug概率
  • 写文件读取逻辑时尽量显式指定编码,同时过滤不符合格式要求的文件,减少环境差异导致的报错
  • 编写代码时注意不要把编辑器的自动补全占位符误写到业务逻辑里,写完逐行检查字符串拼写是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:27:16