在程式設計中,
多少都會遇到錯誤,
這些錯誤發生的時候要做何種應對,
就得靠今天的主題:
Python 例外處理 Exception Handling
此處以 try ... exception .... 為範例來說明。
try:
tmpuser = User.objects.get(username=username)
if tmpuser.is_active:
messages.add_message(request, messages.ERROR, '密碼錯誤')
else:
messages.add_message(request, messages.ERROR, '帳號未啟用,請至註冊信箱收取認證信')
return redirect('Login')
except User.DoesNotExist:
messages.add_message(request, messages.ERROR, '無此帳號')
return redirect('Login')
上面是登入機制的一個例外處理範例,
當 User.DoesNotExist (該使用者不存在)的時候,
就顯示訊息 '無此帳號',
若要針對其他錯誤進行不同的動作,
繼續新增 except Exception: 即可,
官方文件針對 Built-in Exceptions 也有說明,
有興趣的話可以點擊進去看。
若為資料庫連線或者檔案處理中途發生了錯誤,
或者程式並沒有遇到錯誤,
可以透過 finally 讓程式最後無論如何都會執行此區塊中的程式碼,
不管是否有遇到錯誤,程式碼必然會執行 finally 區塊。
寫法可參考底下範例:
try:
tmpuser = User.objects.get(username=username)
if tmpuser.is_active:
messages.add_message(request, messages.ERROR, '密碼錯誤')
else:
messages.add_message(request, messages.ERROR, '帳號未啟用,請至註冊信箱收取認證信')
return redirect('Login')
except User.DoesNotExist:
messages.add_message(request, messages.ERROR, '無此帳號')
finally:
messages.add_message(request, messages.ERROR, '釋放資源')
return redirect('Home')
除了上述官方文件的 Built-in exceptions 之外,
也能夠自訂例外物件,
自訂的物件必須要繼承自Exception類別,
不過這屬於較為進階的用法,
在此處入門的教學就不多談論,
有機會的話再另行介紹。
沒有留言:
張貼留言