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

Python3.8(macOS)函数未被调用却自动执行问题求助

问题分析与解决建议

问题根源

你的问题并非来自当前主脚本的main函数本身,而是导入的Scraper或Creator模块中存在顶层代码直接执行函数调用,以及主脚本缺少模块运行判断导致的:

  1. Python导入模块时会逐行执行模块内的所有顶层代码,若Scraper.py里直接写了scraper()(而非仅定义函数),或Creator.py里直接写了Auto(),导入时这些函数就会自动执行,造成“未调用main()却执行逻辑”的现象。
  2. 当你主动调用main()时,导入阶段已经执行过一次函数,循环启动后又执行一次,所以出现“额外多执行一次”的情况。

修复步骤

1. 修正Scraper.py和Creator.py

确保两个模块中所有可执行逻辑都被包裹在函数内,仅在模块被直接运行时才调用函数,添加if __name__ == "__main__":判断:

Scraper.py示例:

def scraper():
    # 你的爬取逻辑代码
    pass

# 只有直接运行Scraper.py时才执行函数
if __name__ == "__main__":
    scraper()

Creator.py示例:

def Auto(index):
    # 你的创建逻辑代码
    pass

# 只有直接运行Creator.py时才执行函数
if __name__ == "__main__":
    Auto(1)

2. 修正主脚本

给主脚本添加模块运行判断,避免主脚本被其他模块导入时自动执行main(),同时简化while条件:

import Scraper
import Creator

def main(index=1):
    operation = True
    while operation:  # 简化判断,无需写==True
        try:
            Scraper.scraper()
            Creator.Auto(index)
        except Exception as e:
            print(e)
            operation = False

# 只有直接运行当前主脚本时才调用main()
if __name__ == "__main__":
    main()

验证效果

  • 未主动调用main()时:导入模块不会触发函数执行,仅当直接运行主脚本时才会启动main()。
  • 调用main()时:循环内的逻辑只会从第一次开始执行,不会出现额外的前置执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:25