编写“仅执行”Python模块的最佳实践是什么?

时间:2014-01-04 16:59:47

标签: python import scope main

我有一个专门用于作为脚本运行的Python模块,而不是应该导入的东西,我想在我的代码中强制执行(并传达)这个意图。

实现这一目标的最佳做法是什么?


我可以想象一些选项,例如将整个文件包装在

if __name__ == '__main__':
    # All the code in the module

或在开始时中止

if __name__ != '__main__':
    exit()

# All the code in the module

或许有警告

if __name__ != '__main__':
    print('You should not import this')
    exit()

# All the code in the module

甚至断言

assert __name__ == '__main__', 'You should not import this'

但我不确定哪种(如果有的话)是合适的,风格上或技术上的。

1 个答案:

答案 0 :(得分:3)

虽然你确实可以做到

if __name__ != '__main__':
    raise ImportError(...)
    # or maybe just emit a warning

前几天它可能会站在你的脚下。

至少,您应该单独保留功能,类和其他定义 - 它们不会造成任何伤害,也许您或其他人以后需要它们。

如果你导入一个只暴露函数,类和值而不做输出或其他事情的模块,你所丢失的只是几毫秒。

相反,您应该将启动时执行的代码放入函数(main()?)并以通常的方式执行。