我已經看到了這個在最近我一直在閱讀的幾個python腳本。我曾看過文檔;他們只給出一些例子來處理傳遞終止值或某種字符串。這是什麼意思退出(main())
我想這是做什麼的調用主要方法,然後退出?
如果有人可以對此有所瞭解,我將不勝感激。
if __name__ == "__main__":
exit (main())
請和謝謝
我已經看到了這個在最近我一直在閱讀的幾個python腳本。我曾看過文檔;他們只給出一些例子來處理傳遞終止值或某種字符串。這是什麼意思退出(main())
我想這是做什麼的調用主要方法,然後退出?
如果有人可以對此有所瞭解,我將不勝感激。
if __name__ == "__main__":
exit (main())
請和謝謝
這將調用函數main()
,當主完成後,將退出給系統返回的代碼是main()
結果。
一個簡單的例子,其中此方法可以用於:
def main():
try:
doSomething()
return 0
except:
return 1
if __name__ == "__main__":
exit (main())
如果一個明確的返回值不是在main()
給出的None
默認值將被退回。這會產生與明確指定return 0
相同的系統返回碼。如果main
返回除整數或None
之外的任何內容,則會生成1的系統返回碼。
請注意'try'和'except'在Python中沒有大寫字母 – themaninthewoods
你當然是對的。 (請注意,在StackOverview中,當您看到錯誤時,我們鼓勵您直接編輯答案) – amicitas
是的,除了StackOverflow不允許2個字符的編輯。我試過了。因此,評論。 – themaninthewoods
這意味着運行main()
函數並退出main()
函數返回的返回碼。這是一個常見的習慣用法,因此,從shell運行腳本時,可以可靠地判斷它是否成功。
if __name__ == '__main__':
成語是僅在模塊作爲腳本運行(而不是被導入)時才運行代碼的常用方式。
因爲如果main()包含對sys.exit()的調用,它將退出解釋器。
這樣做的原因是使用main()的返回值作爲腳本返回代碼。
如果您直接執行Python腳本,__name__
設置爲"__main__"
,但是如果您從其他腳本執行import
,則不是。
所以在這種情況下,腳本正在看你是否直接執行它。如果是,則調用main()
函數執行一些工作,並通過exit()
將main()
函數的返回值返回給系統。如果腳本是從另一個模塊導入的,它不會執行main()
函數,只是將腳本的函數和類提供給import
ing腳本。
這是Python中常見的習慣用法。它允許您擁有獨立程序的腳本,但也可以在不嘗試執行import
ing腳本不想完成的工作的情況下執行。
只是增加一個例子在問題中提到的腳本的類型:
#!/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())
使腳本運行整齊。
哪條線你更好奇? –
@Chris問題標題:) – myusuf3