我正在開發(fā)一個(gè)網(wǎng)絡(luò)應(yīng)用程序。用戶可以設(shè)置一些參數(shù)來運(yùn)行一些算法。因此,當(dāng)我在后端提取參數(shù)時(shí),我想在啟動(dòng)算法之前驗(yàn)證它們,這可能會(huì)在長時(shí)間執(zhí)行后崩潰。我應(yīng)該在算法函數(shù)周圍使用裝飾器,還是應(yīng)該將參數(shù)傳遞給像 def validate_parameters() 這樣的函數(shù),如果參數(shù)不正確,它會(huì)引發(fā)錯(cuò)誤?
1 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
Python 的“請(qǐng)求寬恕而不是許可”的經(jīng)驗(yàn)法則是為了保持代碼的簡潔和易于理解。檢查代碼流程可以告訴您預(yù)期的路徑是什么,并且很明顯什么是異常條件。在這種情況下,不檢查輸入有兩個(gè)缺點(diǎn),并且您可以將所有檢查隱藏在函數(shù)中,以便代碼干凈。我想說這里的 pythonic 代碼是這樣的
????if?not?valididate_parameters(params):? ???????????raise?ValidationException(get_validation_error_msg(params))
這里你的validate_parameters
函數(shù)只是做檢查。該get_validation_error_msg
函數(shù)負(fù)責(zé)生成可以呈現(xiàn)給用戶的內(nèi)容的繁重工作。例如,它可以檢查驗(yàn)證函數(shù)在出現(xiàn)任何錯(cuò)誤時(shí)盡早退出的所有參數(shù)。請(qǐng)注意,您必須將 Exception 定義ValidationException
為 Exception 的子類并在更高級(jí)別捕獲它。
除了一般編程的想法之外,在 Django 中,如果您的參數(shù)來自用戶填寫的表單,您應(yīng)該驗(yàn)證表單代碼中的每個(gè)字段。
添加回答
舉報(bào)
0/150
提交
取消