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

Python动态创建变量调用时出现KeyError: variable1,求解决方案

问题分析与修复方案

错误原因

  1. 缩进错误:原代码中print(L)和COUNTER1 = COUNTER1 + 1写在了while True循环外部,导致这两行代码永远不会执行,COUNTER1始终保持初始值1,无法正确记录输入次数。
  2. 变量创建逻辑颠倒:只有输入00时才会创建variable{COUNTER1}变量,但此时没有任何前置输入记录,直接访问会触发KeyError;正常输入时反而没有保存记录的逻辑。
  3. 循环逻辑混乱:while count < COUNTER1和内部的for循环嵌套重复,既会重复打印同一变量,又会漏掉最新的记录。

推荐修复方案(用列表存储历史)

用列表存储输入历史是更简洁可靠的方案,避免动态操作全局变量的风险:

history = []
while True:
    try:
        L = input("Length    :")
        # 触发历史记录查看
        if L.strip() == "00":
            print("输入历史记录:")
            for idx, val in enumerate(history, 1):
                print(f"第{idx}次输入:{val}")
            continue
        # 处理正常输入并保存历史
        L_float = float(L)
        history.append(L_float)
        print(f"当前输入:{L_float}")
    except ValueError:
        print("请输入有效的数字或00查看历史")

原逻辑针对性修复(保留动态变量方式)

如果一定要坚持用全局变量的写法,修正逻辑和缩进:

COUNTER1 = 1
while True:
    L = input("Length    :")
    # 先处理历史查看请求
    if L.strip() == "00":
        print("输入历史记录:")
        # 遍历已创建的所有变量
        for i in range(1, COUNTER1):
            print(globals()[f"variable{i}"])
        continue
    # 处理正常输入并保存变量
    try:
        L_float = float(L)
        globals()[f"variable{COUNTER1}"] = L_float
        print(L_float)
        COUNTER1 += 1
    except ValueError:
        print("请输入有效的数字或00查看历史")

关键修正点

  • 将COUNTER1 +=1移到while True循环内部,每次正常输入后递增计数器
  • 输入00时遍历范围改为range(1, COUNTER1),因为COUNTER1是下一个待创建变量的序号,已存在的变量为1到COUNTER1-1
  • 调整逻辑顺序,先处理历史查看请求,再处理正常输入的保存操作
  • 增加异常处理,防止非数字输入导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:36:21