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

Python交互式选择菜单重复选同一模块时IF逻辑异常问题排查

问题根因
  • Python模块导入特性:同一个模块仅会在首次被import时加载一次,模块内的顶层代码也仅会在首次加载时执行,后续重复执行import语句不会重新触发模块顶层代码运行。你首次选择对应功能时功能正常运行,是因为你的业务逻辑直接写在了compare_exp_daily.py、compare_exp_monthly.py的模块顶层,首次导入时触发了执行。
  • 代码逻辑缺失:你当前代码仅完成了函数导入动作,并没有显式调用导入的command_daily、command_monthly执行函数,首次运行完全依赖导入时的顶层代码执行,属于不符合预期的偶然生效。
修复方案
  1. 将导入语句移到代码文件头部,不要放在循环或分支内,这是Python导入语句的通用规范
  2. 在对应分支下显式调用导入的功能函数即可

修复后代码示例:

# 导入语句统一放在文件头部
from compare_exp_daily import command_daily
from compare_exp_monthly import command_monthly

def comparison_select():
    global month1, month2
    while True:
        try:
            comparison_menu()
            compare_input = int(input("Enter selected comparison: "))
            if compare_input == 1:
                print("Selected comparison period is: Daily")
                # 显式调用功能函数
                command_daily()
            elif compare_input == 2:
                print("Selected comparison period is: Monthly")
                # 显式调用功能函数
                command_monthly()
            elif compare_input == 0:
                print("Thank you & Goodbye!")
                break
            else:
                print("Error, please enter a number from the menu.\n"
                      "Thank you!")
        except:
            print("Error, please enter a valid selection.")

如果你的业务逻辑确实必须写在模块顶层需要每次触发执行,可以使用importlib.reload()方法重载模块,但这种写法并不推荐,优先把业务逻辑封装到函数内显式调用更符合开发规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:04