Python动态创建变量调用时出现KeyError: variable1,求解决方案
问题分析与修复方案
错误原因
- 缩进错误:原代码中
print(L)和COUNTER1 = COUNTER1 + 1写在了while True循环外部,导致这两行代码永远不会执行,COUNTER1始终保持初始值1,无法正确记录输入次数。 - 变量创建逻辑颠倒:只有输入
00时才会创建variable{COUNTER1}变量,但此时没有任何前置输入记录,直接访问会触发KeyError;正常输入时反而没有保存记录的逻辑。 - 循环逻辑混乱:
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
相关产品推荐
相关产品推荐

