2010-06-01 36 views
36

我在寫一個小應用程序,我需要退出程序多次。如何退出程序:sys.stderr.write()或打印

我應該使用:

sys.stderr.write('Ok quitting')
sys.exit(1)

或者我應該只是做一個:

print 'Error!'
sys.exit(1)

哪個更好,爲什麼?請注意,我需要做很多事情。該計劃應徹底退出。

回答

70
sys.exit('Error!') 

注意:如果對象的另一種類型的傳遞

, 無等同於傳遞零, 任何其他對象打印到 sys.stderr並導致退出代碼 爲1.特別是,sys.exit(「some 錯誤消息「)是一種在發生錯誤時退出 程序的快速方法。

6

如果是錯誤信息,通常應該輸入stderr - 但是否需要這取決於您的使用情況。如果您希望用戶重定向stdinstderrstdout,例如,從其他工具運行程序時,應確保將狀態信息和錯誤消息乾淨地分開。

如果只是你使用該程序,你可能不需要打擾。在這種情況下,您可能只會引發異常,程序將自行終止。

順便說一句,你可以從the docs

print >>sys.stderr, "fatal error"  # Python 2.x 
print("fatal error", file=sys.stderr) # Python 3.x 
+0

謝謝你的回答。 – user225312 2010-06-01 13:29:24

12

它們是顯示消息的兩種不同方式。

print一般去sys.stdout,你知道sys.stderr是怎麼回事。值得了解stdin, stdout, and stderr之間的差異。

stdout應該用於正常程序輸出,而stderr應該只保留用於錯誤消息(異常程序執行)。有用於拆分這些流的實用程序,它允許您的代碼的用戶區分正常輸出和錯誤。

print可以打印任何類文件對象上,包括sys.stderr

print >> sys.stderr, 'My error message' 

使用sys.stderr錯誤的代替sys.stdout的的優點是:

  1. 如果用戶重定向到stdout一個文件,他們仍然在屏幕上看到錯誤。
  2. 它沒有緩衝,所以如果sys.stderr被重定向到日誌文件,那麼在錯誤記錄之前程序崩潰的可能性就會降低。

值得一提的是,有可以提供關閉消息的第三種方式:

sys.exit('My error message') 

這將消息發送到stderr並退出。