Python变量别名创建异常:无法正确生成目标OSD消息
问题分析
你现在的核心问题是:osdcheck变量被赋值成了变量名的字符串(比如"pump1or2altosd"),而不是这个变量实际存储的值("off")。所以后续判断osdcheck == "off"永远不成立,只能走else分支,导致输出不符合预期。
解决方案
不要用单独变量存储pumpXorYaltosd的状态,改用字典来管理这些配置,这样可以通过拼接的键名直接拿到对应的值。修改后的代码如下:
# 用字典存储泵的OSD状态,键对应原来的变量名,值是状态 pump_osd_states = { "pump1or2altosd": "off", "pump3or4altosd": "on" } pumpnumber = 1 if (pumpnumber % 2) == 0: evenpump = pumpnumber evenpump_str = str(pumpnumber) print("Even Pump =", evenpump) oddpump = evenpump - 1 oddpump_str = str(oddpump) print("Odd Pump =", oddpump) else: oddpump = pumpnumber oddpump_str = str(pumpnumber) print("Odd Pump =", oddpump) evenpump = oddpump + 1 evenpump_str = str(evenpump) print("Even Pump =", evenpump) # 拼接键名,从字典中获取对应状态 osd_key = f"pump{oddpump_str}or{evenpump_str}altosd" osdcheck = pump_osd_states[osd_key] print(osd_key) # 对应原来的osdcheck打印内容 if osdcheck == "off": osdmsg = f"{evenpump_str} <---|---|> {oddpump_str}" else: osdmsg = f"{oddpump_str} <---|---|> {evenpump_str}" print(osdmsg)
改动说明
- 把分散的
pumpXorYaltosd变量整合到字典pump_osd_states中,更易维护和读取 - 用f-string拼接键名(比字符串相加更简洁),通过键名从字典中取出实际的状态值赋值给
osdcheck - 简化了原代码中冗余的中间变量(比如
evenpumpminus1、oddpumpplus1,直接用算术表达式即可) - 同样用f-string拼接
osdmsg,代码更简洁
运行这段代码后,就能得到你期望的输出:
Odd Pump = 1 Even Pump = 2 pump1or2altosd 2 <---|---|> 1
内容的提问来源于stack exchange,提问作者pathlore
相关产品推荐
相关产品推荐

