2011-03-12 81 views
15

我已經看到了這個在最近我一直在閱讀的幾個python腳本。我曾看過文檔;他們只給出一些例子來處理傳遞終止值或某種字符串。這是什麼意思退出(main())

我想這是做什麼的調用主要方法,然後退出?

如果有人可以對此有所瞭解,我將不勝感激。

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

請和謝謝

+1

哪條線你更好奇? –

+1

@Chris問題標題:) – myusuf3

回答

16

這將調用函數main(),當主完成後,將退出給系統返回的代碼是main()結果。

一個簡單的例子,其中此方法可以用於:

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


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


如果一個明確的返回值不是在main()給出的None默認值將被退回。這會產生與明確指定return 0相同的系統返回碼。如果main返回除整數或None之外的任何內容,則會生成1的系統返回碼。

+0

請注意'try'和'except'在Python中沒有大寫字母 – themaninthewoods

+0

你當然是對的。 (請注意,在StackOverview中,當您看到錯誤時,我們鼓勵您直接編輯答案) – amicitas

+0

是的,除了StackOverflow不允許2個字符的編輯。我試過了。因此,評論。 – themaninthewoods

3

這意味着運行main()函數並退出main()函數返回的返回碼。這是一個常見的習慣用法,因此,從shell運行腳本時,可以可靠地判斷它是否成功。

if __name__ == '__main__':成語是僅在模塊作爲腳本運行(而不是被導入)時才運行代碼的常用方式。

4

因爲如果main()包含對sys.exit()的調用,它將退出解釋器。

這樣做的原因是使用main()的返回值作爲腳本返回代碼。

15

如果您直接執行Python腳本,__name__設置爲"__main__",但是如果您從其他腳本執行import,則不是。

所以在這種情況下,腳本正在看你是否直接執行它。如果是,則調用main()函數執行一些工作,並通過exit()main()函數的返回值返回給系統。如果腳本是從另一個模塊導入的,它不會執行main()函數,只是將腳本的函數和類提供給import ing腳本。

這是Python中常見的習慣用法。它允許您擁有獨立程序的腳本,但也可以在不嘗試執行import ing腳本不想完成的工作的情況下執行。

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包,其中另一main功能從youtube_dl模塊導入。請注意,在@Chris指出的情況下直接執行腳本時,不要混淆「__name__設置爲__main__」。總體而言,可以利用exit(main()) 使腳本運行整齊。