为什么我导入模块时Python会运行它,如何停止它?
为什么我导入模块时Python会运行它,如何停止它?
我正在构建一个 Python 程序,它可以通过两种方式运行:第一种方式是调用 python main.py
,它会以友好的方式提示用户输入,然后通过程序运行用户输入。另一种方法是调用 python batch.py -file-
,它将跳过所有友好的输入收集,并在一个批处理过程中运行整个文件。
问题是,当我运行 batch.py
时,它会从 main.py
中导入一些变量/方法/等等,当它运行这段代码时:
import main
在程序的第一行,它立即出错,因为它尝试运行 main.py
中的代码。
我该如何阻止 Python 运行我正在导入的 main
模块中包含的代码?
admin 更改状态以发布 2023年5月21日
由于Python的工作方式,当它导入模块时,必须运行模块。
为了防止在导入时执行模块中的代码,只在直接运行时执行,您可以用此if
进行保护:
if __name__ == "__main__": # this won't be run when imported
您可能会想把这段代码放在main()
方法中,这样您就可以直接执行文件,或导入模块并调用main()
。例如,假设这是文件foo.py
中的内容。
def main(): print "Hello World" if __name__ == "__main__": main()
此程序既可以通过python foo.py
来运行,也可以从另一个Python脚本中运行:
import foo ... foo.main()