即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中. 在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == 'main' , 这样当模块被导入时主程序就不会被执行。
使用 absl 时, 请调用 app.run
:
from absl import app
...
def main(argv):
# 处理非标志 (non-flag) 参数
...
if __name__ == '__main__':
app.run(main)
否则, 使用:
def main():
...
if __name__ == '__main__':
main()
导入模块时会执行该模块的所有顶级代码. 注意顶级代码中不能有 pydoc
不该执行的操作, 比如调用函数, 创建对象等.