2017-01-03 96 views
0

我有這樣的代碼:嘗試 - 除了多,除了錯誤

try: 
    hotel.objects.get(id=id).delete() 
    messages.success(request, 'Deleted') 
except: 
    car.objects.get(id=id).delete() 
    messages.success(request, 'Deleted') 
except: 
    person.objects.get(id=id).delete() 
    messages.success(request, 'Deleted') 
except: 
    messages.error(request, 'Error') 

我會嘗試刪除hotelcar。它適用於此方法,但我需要再刪除一個model,如果我嘗試刪除不在此處的model,我需要Error。但我只能有一個except,否則它給了我下面的錯誤:

我怎樣才能使它發揮作用?

+0

如果你想嵌套嘗試除外。 –

回答

1

首先,您的語法不正確。您不能在同一級別擁有多個except塊,每個塊捕捉到不同代碼塊的異常。對於正確性的緣故,它應該是:

try: 
    hotel.objects.get(id=id).delete() 
    messages.success(request, 'Deleted') 
except: 
    try: 
     car.objects.get(id=id).delete() 
     messages.success(request, 'Deleted') 
    except: 
     try: 
      person.objects.get(id=id).delete() 
      messages.success(request, 'Deleted') 
     except: 
      messages.error(request, 'Error') 

但是,這不是一個很好的代碼風格。如果你有更多的模型要刪除,你最終會得到一個長的代碼鏈。我建議有一個模型列表,然後只是循環它,並嘗試刪除一個接一個:

models = [hotel, car, person] 
for model in models: 
    try: 
     model.objects.get(id=id).delete() 
     messages.success(request, 'Deleted') 
     break 
    except: 
     pass 
+0

你可以有多個'except'塊,但是你必須爲每個除外,但最後一個指定你期望的錯誤類型https://docs.python.org/2.7/tutorial/errors.html –

+0

正是我需要的, 謝謝先生! – User100696

+0

在第二個代碼塊中,上面的代碼需要在執行delete()的行後面有一個'break',否則你在酒店做刪除操作*和*在汽車上刪除*和*刪除person - if我正確地理解你 - 不是你想要做的 – hansaplast