Python中__main__.py模块导入后调用异常的原因咨询
问题原因分析:为什么导入
__main__找不到main函数? 咱们先搞懂Python里__main__这个特殊模块的核心逻辑:
当你直接运行一个Python脚本文件时,这个脚本会被Python解释器标记为
__main__模块——简单说,谁被直接运行,谁就是__main__。
第一个场景:运行test.py无输出的原因
当你执行python test.py时,test.py本身就是当前的__main__模块。这时候你写import __main__,其实是在导入test.py自己,根本没碰同目录下的__main__.py。
- 只有当你直接运行
__main__.py(比如python __main__.py)时,它里面的print(__name__)才会执行。你现在运行的是test.py,__main__.py完全没被触发,所以自然没输出。
第二个场景:报错AttributeError的原因
你修改代码后,运行test.py的逻辑本质没变:
test.py依然是被直接运行的脚本,所以它是当前的__main__模块;- 这时候
import __main__导入的还是test.py自己,而你的test.py里根本没定义main()函数; - 所以调用
__main__.main()时,Python自然会报错说找不到这个属性。
怎么解决这个问题?
如果你想调用__main__.py里的main()函数,别用__main__这个特殊名字导入——把__main__.py改个普通名字,比如my_main.py,然后在test.py里这么写:
import my_main my_main.main()
这样就能正常调用了。
另外补充一句:__main__.py通常是给Python包用的——当你用python -m 你的包名运行整个包时,包目录下的__main__.py会被当作入口执行,这时候它才会成为__main__模块。
内容的提问来源于stack exchange,提问作者lyzMaster
相关产品推荐
相关产品推荐

