Python while循环内全局变量运行逻辑异常修复方案
Python实时价格触发逻辑修复方案
问题根因
- 原代码匹配到对应价格区间、给X/Y/Z赋值后直接执行
break跳出循环,完全不会走到循环头部的标记校验分支,因此首次触发200-300价格区间时只会输出2 test line Y,无法输出预期的test line success Y。 - 原逻辑仅用X/Y/Z作为订单是否执行的判断依据,这三个变量会被外部业务逻辑修改,一旦标记值被改回非
test line *内容,价格区间分支会被重复触发,导致订单逻辑无限执行。 - 受约束限制不能使用
continue关键字,无法通过赋值后直接跳回循环头部的方式触发校验逻辑。
修复逻辑
- 新增三个独立的订单执行状态标记,这类标记仅在对应订单首次执行时置位,不受X/Y/Z的外部修改影响,从根源避免订单逻辑重复执行。
- 移除价格区间分支内的直接
break语句,完成订单计算、标记赋值后让循环自然流转,下一次循环迭代会自动走到头部的标记校验分支,输出对应成功提示。 - 所有价格区间判断前增加已执行校验,已经完成的订单分支直接跳过,不重复执行计算逻辑。
修复后可运行代码
last_price = 230 SL = 100 SL1 = 200 SL2 = 300 SL3 = 400 X = 'yes X' Y = 'yes Y' Z = 'yes Z' # 独立订单执行标记,不受外部X/Y/Z修改影响 order_x_done = False order_y_done = False order_z_done = False def addvar (A, B): while True: global X, Y, Z, order_x_done, order_y_done, order_z_done if X == 'test line X': print('test line success X') break if Y == 'test line Y': print('test line success Y') break if Z == 'test line Z': print('test line success Z') break if not order_x_done and SL < last_price <= SL1: # 价格区间100-200 order_succeeded = A + B X = 'test line X' order_x_done = True print(order_succeeded, X) if not order_y_done and SL1 < last_price <= SL2: # 价格区间200-300 order_succeeded_1 = A - B Y = 'test line Y' order_y_done = True print(order_succeeded_1, Y) if not order_z_done and SL2 < last_price <= SL3: # 价格区间300-400 order_succeeded_2 = A * B Z = 'test line Z' order_z_done = True print(order_succeeded_2, Z) addvar(6, 4)
效果说明
- 运行代码后会先输出区间触发的打印内容
2 test line Y,循环自动进入下一轮迭代后匹配到Y的校验规则,输出预期的test line success Y后正常退出。 - 即使后续Y被外部逻辑修改为其他值,由于
order_y_done已经置为True,对应价格区间的订单逻辑永远不会重复触发,不存在无限执行风险。 - 全程未使用
continue关键字,完全符合约束要求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

