我正在尋找一個關於如果函數失敗返回失敗的良好慣例。我通常喜歡返回None或False,但在我的情況下,函數的目的是讀取IO,它可以是bool(True/False),int或float。如何在Python中返回失敗值
所以在這種情況下我不能返回一個False。我嘗試過使用None,但我不知道這是否是最好的情況,因爲如果我不檢查返回結果,因爲我稱之爲None輸出可能會被識別爲False輸出。
我在想有一個具有字符串標記的定義文件,但似乎有效地解析字符串。
是否有內置對象可用?什麼是約定?
我正在尋找一個關於如果函數失敗返回失敗的良好慣例。我通常喜歡返回None或False,但在我的情況下,函數的目的是讀取IO,它可以是bool(True/False),int或float。如何在Python中返回失敗值
所以在這種情況下我不能返回一個False。我嘗試過使用None,但我不知道這是否是最好的情況,因爲如果我不檢查返回結果,因爲我稱之爲None輸出可能會被識別爲False輸出。
我在想有一個具有字符串標記的定義文件,但似乎有效地解析字符串。
是否有內置對象可用?什麼是約定?
如果函數失敗,應該引發異常。根據Python的原理,不得不檢查您的返回值是否無效。
更容易要求寬恕比權限。這種常見的Python編碼風格假定存在有效的鍵或屬性,並且如果假設證明是錯誤的,則捕獲異常。這種乾淨而快速的風格的特點是存在許多嘗試和除外聲明。該技術與許多其他語言(如C)通用的LBYL風格形成對比。
如果我在函數中引發一個異常,我是否仍然需要從函數中返回一些東西並從調用者那邊處理它,以便我的腳本繼續運行?或者我應該從呼叫方有另一個嘗試和異常聲明? – Sam
異常想法簡單地分離兩個程序流程:正常(如果一切正常)和例外(當某些事情被破壞時)。當程序語言中出現異常時,對於支持異常機制的語言,舊的「檢查返回值」編程風格已被棄用(**和極少數異常**)。當你的函數正常結束時,它返回預期的結果值。如果沒有,它會引發異常,並且調用者模塊應該捕獲並處理它 - 如果它知道如何處理這個異常,則返回值**不會被傳遞給調用者函數**。 – lospejos
@lospejos對於調用者模塊「抓住並處理它」,你會怎麼做?你會用try和except語句來處理它嗎? – Sam
很確定該慣例會引發錯誤。 –
您是否考慮過在錯誤中引發異常? – cdarke
使用例外。這就是他們的目的。我知道很多不熟悉它們的程序員覺得他們根本不希望發生「錯誤」,只是簡單地捕捉它並不是一個好的解決方案,但這不是一個錯誤,它是一個例外 - 那就是他們在那裏的原因。 – Fhaab