前一段時間我寫了一段代碼,燒瓶路線註銷從Web應用程序我工作的用戶來說,這看起來就像是:Python化的方式來處理錯誤和異常
@app.route('/logout')
@login_required
def logout():
# lets get the user cookie, and if it exists, delete it
cookie = request.cookies.get('app_login')
response = make_response(redirect(url_for('login')))
if cookie:
riak_bucket = riak_connect('sessions')
riak_bucket.get(cookie).delete()
response.delete_cookie('app_login', None)
return response
return response
我做它的工作,當然是在工作,但現在我正在通過添加適當的錯誤處理來增強應用程序的可靠性,這是我之前在代碼中沒有做到的大規模任務。所以我偶然發現了這個路由函數,當我意識到我不知道如何以正確的方式做它時,我開始編寫它的新版本。這是我想出的:
@app.route('/logout')
@login_required
def logout():
# why dont we call variables after what they are in specifics?
login_redirect = make_response(redirect(url_for('login')))
try:
cookie = request.cookies.get('app_login')
except:
return login_redirect
# if we are here, the above try/except went good, right?
try:
# perhaps sessions_bucket should really be bucket_object?
# is it valid to chain try statements like that, or should they be
# tried separately one by one?
sessions_bucket = riak_connect('sessions')
sessions_bucket.get(cookie).delete()
login_redirect.delete_cookie('app_login', None)
except:
return login_redirect
# return redirect by default, just because it seems more secure
return login_redirect
這也是它的工作,但仍然沒有看起來'正確'給我。所以,對於所有在編寫真python Python代碼方面都有豐富經驗的人來說,考慮到我喜歡用代碼很好地處理所有錯誤的代碼,可以被其他人閱讀,並且快速而且完美地完成它的工作情況下,而且在相當大的代碼庫的其餘部分):
- 你怎麼呼喚你的變量,額外的特定的或一般:sessions_bucket VS riak_bucket VS bucket_object?
- 你如何處理錯誤,通過嘗試/除了一個接一個,或通過嵌套一個嘗試/除了在另一個,或以任何其他方式?
- 可以在一次嘗試中做多個事情嗎?除外,還是不行?
- 也許是別的,這涉及到你的頭腦上面的代碼示例
提前感謝!
坦率地說,隨着在線評論之外,您使用的嘗試 - 除了長相正確的我。當然,你可以從中學到很多東西,但從務實的角度來看,你的代碼很好。 – rdodev
rdodev:第二個例子中的註釋是我對代碼是否正確的懷疑,並且意在在這裏回答。你是否也談到了第一個例子的評論,如果是的話,他們有什麼問題,什麼是更好的方法? – SpankMe
我認爲捕捉所有異常通常是一個壞主意。 http://stackoverflow.com/questions/10594113/bad-idea-to-catch-all-exceptions-in-python –