Python add_new_device函数重复执行,如何终止旧调用仅运行新实例?
问题解决
问题根源
你当前的实现采用递归重启流程,但触发校验失败调用新的add_new_device()后,没有终止当前函数实例的运行,新递归实例执行完毕后,原函数会继续执行后续的输入、存储逻辑,最终导致重复输入、重复插入设备数据的问题。
方案1:最小改动修复(直接终止当前函数调用)
只需要在每次递归调用add_new_device()后添加return语句,直接结束当前函数的执行,就不会再跑后续逻辑:
import time # 假设devices_all是全局存储的设备列表 devices_all = [] def add_new_device(): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n > MAIN MENU > SHOW OR EDIT INVENTORY > ADD NEW DEVICE") new_device = {} print ("\nPlease enter a key for your device - e.g. \"R\" for Router") new_devkey = input("\n\n Device key: ") new_device["dev_key"] = new_devkey if any(x["dev_key"] == new_devkey for x in devices_all): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n DEVICE KEY ALREADY EXISTS!") print(" PLEASE ASSIGN A DIFFERENT KEY") time.sleep(1) add_new_device() # 新增return终止当前函数运行 return new_devname = input(" Device name: ") new_device["dev_name"] = new_devname if any(y["dev_name"] == new_devname for y in devices_all): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n DEVICE NAME ALREADY EXISTS!") print(" PLEASE ASSIGN A DIFFERENT NAME") time.sleep(1) add_new_device() # 新增return终止当前函数运行 return new_device["dev_quantity"] = input(" Device quantity: ") devices_all.append(new_device) print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n SUCCESSFULLY ADDED NEW DEVICE") print("\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ") return new_device
方案2:更推荐的循环实现(避免递归栈溢出风险)
递归方式如果用户连续多次输错,会触发递归深度超限报错,改用while循环逐步骤校验,逻辑更清晰稳定:
import time devices_all = [] def add_new_device(): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n > MAIN MENU > SHOW OR EDIT INVENTORY > ADD NEW DEVICE") new_device = {} # 校验设备key while True: print ("\nPlease enter a key for your device - e.g. \"R\" for Router") new_devkey = input("\n\n Device key: ") if any(x["dev_key"] == new_devkey for x in devices_all): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n DEVICE KEY ALREADY EXISTS!") print(" PLEASE ASSIGN A DIFFERENT KEY") time.sleep(1) continue new_device["dev_key"] = new_devkey break # 校验设备名称 while True: new_devname = input(" Device name: ") if any(y["dev_name"] == new_devname for y in devices_all): print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n DEVICE NAME ALREADY EXISTS!") print(" PLEASE ASSIGN A DIFFERENT NAME") time.sleep(1) continue new_device["dev_name"] = new_devname break # 输入数量 new_device["dev_quantity"] = input(" Device quantity: ") devices_all.append(new_device) print("\n––––––––––––––––––––––––––––––––––––––––––––––––––––––––––") print("\n SUCCESSFULLY ADDED NEW DEVICE") print("\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ") return new_device
内容的提问来源于stack exchange,提问作者CunnyFunt
相关产品推荐
相关产品推荐

