try...except 語句通常用於捕獲和處理可能在程式碼執行過程中發生的異常

侬侬发發表於2024-08-22

在Django中,try...except 語句通常用於捕獲和處理可能在程式碼執行過程中發生的異常。這有助於防止程式因未處理的錯誤而崩潰,並允許開發者優雅地處理錯誤場景。以下是一些常見的用法示例:

1. 資料庫操作中的異常處理

在進行資料庫操作時,可能會遇到如資料不存在、唯一性約束違反等問題。try...except 可以用於捕獲這些異常並作出相應處理。

from django.core.exceptions import ObjectDoesNotExist
from myapp.models import MyModel

def get_object(pk):
    try:
        obj = MyModel.objects.get(pk=pk)
        return obj
    except ObjectDoesNotExist:
        return None  # 或者返回一個錯誤訊息

2. 處理表單驗證錯誤

在處理表單資料時,可能會遇到表單驗證失敗的情況,使用 try...except 可以捕獲並處理這些錯誤。

from django import forms

class MyForm(forms.Form):
    name = forms.CharField(max_length=100)

def handle_form_submission(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        try:
            if form.is_valid():
                # 處理表單資料
                pass
            else:
                raise forms.ValidationError("Form data is invalid")
        except forms.ValidationError as e:
            return render(request, 'form_template.html', {'form': form, 'error': str(e)})

3. 檔案操作中的異常處理

在處理檔案上傳或讀寫操作時,try...except 可以捕獲和處理檔案操作中可能出現的錯誤,如檔案不存在或許可權不足。

import os

def read_file(file_path):
    try:
        with open(file_path, 'r') as f:
            return f.read()
    except FileNotFoundError:
        return "File not found"
    except IOError as e:
        return f"An I/O error occurred: {str(e)}"

4. 檢視中的異常處理

在Django檢視中,可以使用 try...except 捕獲和處理可能在檢視邏輯中發生的任何異常。

from django.http import HttpResponse
from myapp.models import MyModel

def my_view(request):
    try:
        obj = MyModel.objects.get(id=1)
        return HttpResponse(f"Object: {obj.name}")
    except MyModel.DoesNotExist:
        return HttpResponse("Object does not exist", status=404)
    except Exception as e:
        return HttpResponse(f"An error occurred: {str(e)}", status=500)

5. API請求中的異常處理

當你在檢視中呼叫外部API時,可能會遇到網路問題或API返回錯誤。使用 try...except 可以捕獲並處理這些異常。

import requests
from django.http import JsonResponse

def external_api_view(request):
    try:
        response = requests.get('https://api.example.com/data')
        response.raise_for_status()
        data = response.json()
        return JsonResponse(data)
    except requests.exceptions.RequestException as e:
        return JsonResponse({'error': str(e)}, status=500)

總結

使用 try...except 可以增強程式碼的健壯性,透過優雅地處理異常來提高使用者體驗。在Django專案中,無論是資料庫操作、表單處理、檔案操作,還是檢視邏輯,都可以藉助 try...except 處理異常情況。

相關文章