簡體   English   中英

在燒瓶中,我應該手動捕獲視圖中的所有可能錯誤嗎?

[英]In flask, should i manually catch all possible error in views?

我是Flask的新手,在編寫視圖時,如果應該捕獲所有錯誤,我會徘徊。 如果我這樣做,大多數視圖代碼應該包含try ... except。 我認為這不是優雅的。

例如。

@app.route('/')
def index():
    try:
        API.do()
    except:
        abort(503)

我應該像這樣編碼嗎? 如果沒有,服務會崩潰(uwsgi + lnmp)嗎?

你只能抓住你能處理的東西。 “句柄”一詞意味着“做一些有用的事情”而不僅僅是“打印消息而死”。 打印和骰子已經由異常機制處理,並且可能比你更好。

例如,這不是有用的處理異常:

denominator = 0
try:
    y = x / denominator
except ZeroDivisionError:
    abort(503)

你無能為力, abort是多余的,因為無論如何,未被捕獲的異常將導致發生。 以下是有用處理的示例:

try:
    config_file = open('private_config')
except IOError:
    config_file = open('default_config_that_should_always_be_there')

但請注意,如果第二次打開失敗,沒有任何用處,它會向上移動調用堆棧並可能暫停程序。 你永遠不應該做的是except:因為它隱藏了有關故障的信息。 當你得到“所有它說的是503”的缺陷報告並且你不知道API.do()API.do()什么問題時,這會導致很多人API.do()

嘗試/除了無法進行任何有用處理的塊會使代碼混亂並在視覺上掩蓋主要的執行流程。 沒有異常的語言會強制您檢查每次調用錯誤返回,如果只是為了生成錯誤返回自己。 部分存在例外以消除代碼噪聲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM