如何避免Python程序在导入时重复执行代码?
解决Python reload模块时顶级代码重复执行的问题
问题原因
- 当
run.py执行import main时,main.py里所有顶级代码(比如直接写在函数外的print("main1"))会自动执行一次。 - 每次调用
importlib.reload(main)时,main.py的顶级代码会被重新执行一次,这就导致print("main1")被执行两次(首次import一次,首次reload一次)。 - 若把
print("main1")放入if __name__ == '__main__':块中,由于main模块被import/reload时,它的__name__是'main'而非'__main__',所以该代码块永远不会触发执行。
解决方案
把需要执行的逻辑封装成函数,由run.py主动调用,避免顶级代码自动执行。
修改后的main.py
def fun(): print("main2") def run(): # 原顶级执行逻辑封装到函数中 print("main1")
修改后的run.py
import time import main import importlib while True: try: importlib.reload(main) # 主动调用main模块的run函数执行逻辑 main.run() main.fun() except Exception as e: # 捕获具体异常,便于排查问题 print(f"错误: {e}") time.sleep(1)
额外说明
- 尽量避免在模块顶级编写可执行代码,将逻辑封装成函数或类,这样import模块时不会自动执行逻辑,只有主动调用才会触发。
- 不要使用裸
except,应捕获具体异常类型,避免隐藏潜在问题。
内容的提问来源于stack exchange,提问作者CL So
相关产品推荐
相关产品推荐

