2017-01-03 5 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') 

Я постараюсь удалить hotel или car. Он отлично работает с этим методом, но мне нужно удалить еще один model, и если я попытаюсь удалить model, это не здесь, я хочу Error. Но я могу иметь только один except, в противном случае это дает мне следующую ошибку:

Как я могу заставить его работать?

+0

Вы можете вставить try-excepts, если хотите. –

ответ

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

во втором кодовом блоке для кода выше требуется строка 'break' после строки, которая выполняет' delete() ', в противном случае вы делаете удаление в отеле * и * удаляете на автомобиле * и * удаляете на человека, который - если Я правильно вас понимаю - это не то, что вы хотите сделать. – hansaplast

Смежные вопросы