这是什么意思退出(main())

时间:2011-03-12 01:34:24

标签: python

我在最近一直在阅读的一些python脚本中看到了这一点。我查看了文档;他们只举例说明传递终止值或某种字符串。

我认为这样做是调用main方法,然后退出?

如果有人可以对此有所了解,我将不胜感激。

if __name__ == "__main__":
   exit (main())

请,谢谢

5 个答案:

答案 0 :(得分:23)

这将调用函数main(),当main完成时,它将退出,为系统提供main()结果的返回码。

可能使用此功能的简化示例:

def main():
    try:
        doSomething()
        return 0
    except:
        return 1


if __name__ == "__main__":
    exit (main())


如果main()中未给出显式返回值,则将返回默认值None。这将生成与显式指定return 0相同的系统返回码。如果main返回除整数或None以外的任何内容,系统将返回1的返回代码。

答案 1 :(得分:19)

如果您直接执行Python脚本,__name__设置为"__main__",但如果您import来自其他脚本,则不是。{/ p>

所以在这种情况下,脚本会看到你是否直接执行它。如果是,则调用main()函数执行某些工作,并通过main()exit()函数的返回值返回给系统。如果从另一个模块导入脚本,它不会执行main()函数,只是将脚本的函数和类提供给import脚本。

这是Python中常见的习语。它允许您拥有独立程序的脚本,但也可以import编辑而不尝试执行import脚本不想要的工作。

答案 2 :(得分:4)

因为如果main()包含对sys.exit()的调用,它将退出解释器。

这样做的原因是使用main()的返回值作为脚本返回代码。

答案 3 :(得分:3)

这意味着运行main()函数并退出main()函数返回的返回码。这是一个常见的习惯用法,因此,当从shell运行脚本时,您可以可靠地判断它是否成功。

if __name__ == '__main__':成语是仅在模块作为脚本运行(而不是导入)时运行代码的常用方法。

答案 4 :(得分:1)

只需在问题中提到的脚本类型中添加一个示例:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys

from youtube_dl import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

这是来自youtube-dl包,其中从youtube_dl模块导入了另一个main函数。请注意,这不应与&#34相混淆; __name__设置为__main__"当@Chris指出直接执行脚本时。总的来说,exit(main()) 可以用来使脚本运行得很整齐。