为什么我导入模块时Python会运行它,如何停止它?

46 浏览
0 Comments

为什么我导入模块时Python会运行它,如何停止它?

我正在构建一个 Python 程序,它可以通过两种方式运行:第一种方式是调用 python main.py,它会以友好的方式提示用户输入,然后通过程序运行用户输入。另一种方法是调用 python batch.py -file-,它将跳过所有友好的输入收集,并在一个批处理过程中运行整个文件。

问题是,当我运行 batch.py 时,它会从 main.py 中导入一些变量/方法/等等,当它运行这段代码时:

import main

在程序的第一行,它立即出错,因为它尝试运行 main.py 中的代码。

我该如何阻止 Python 运行我正在导入的 main 模块中包含的代码?

admin 更改状态以发布 2023年5月21日
0
0 Comments

由于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()

0
0 Comments

这是 Python 的工作方式-例如 classdef 这样的关键字不是声明语句. 而是实际运行的语句. 如果它们不执行,你的模块就会是空的。

惯用的方法是:

# stuff to run always here such as class/def
def main():
    pass
if __name__ == "__main__":
   # stuff only to run when not called via 'import' here
   main()

但这要求对导入的模块进行源代码控制。

0