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

