2016-10-02 54 views
1

我只是想簡單的代碼:不理解Python中返回行爲

import sys 

def main(): 
    print "this is main" 
    return "string1" 

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

當我運行這段代碼,它給出隨機結果,有時是「字符串1」,「這是主」之前,有時之後。

這是爲什麼?

2樣本輸出:

這是主要

字符串1

過程結束,退出代碼1

============

string1

這是主要

過程,退出代碼完成1

+0

這是甚麼打印?爲什麼'sys.exit()'將一個字符串作爲參數? –

+1

@ cricket_007查看'sys.exit'的文檔https://docs.python.org/2/library/sys.html#sys.exit – timakro

+0

@timarko - 我的問題是針對OP,而不是我缺乏瞭解 –

回答

2

sys.exit需要的main()的返回值,併產生它作爲應用程序的錯誤代碼。值通常應該是數字,但Python在這裏有點棘手。

sys.exit文檔:

如果另一種類型的對象的傳遞,沒有相當於傳遞 零,以及任何其他對象被打印到stderr和結果在1退出 代碼。特別是,sys.exit(「一些錯誤消息」)是一種快速發生錯誤時退出程序的方式。

那麼,什麼可能發生的情況是stdout(用於print)沖洗和上面指定的輸出stderr之間的競爭。

我建議你在printsys.stdout.flush)之後嘗試刷新stdout,看看你是否以這種方式獲得一致的輸出。

+0

查看'sys.exit'的文檔https://docs.python.org/2/library/sys.html#sys.exit – timakro

+0

@timakro:是的,你說得對。感謝您指出這一點 –

+0

@EliBendersky謝謝。我明白了這種行爲背後的想法。我試過sys.stdout。在print語句後flush(),但仍然是相同的行爲。 –