我在最近一直在阅读的一些python脚本中看到了这一点。我查看了文档;他们只举例说明传递终止值或某种字符串。
我认为这样做是调用main方法,然后退出?
如果有人可以对此有所了解,我将不胜感激。
if __name__ == "__main__":
exit (main())
请,谢谢
答案 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())
可以用来使脚本运行得很整齐。