尝试 - 除了错误以外的多个

时间:2017-01-03 20:53:34

标签: django python-2.7

我有这段代码:

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,否则会给我以下错误:

  

SyntaxError:默认'except'必须是最后一个

我怎样才能让它发挥作用?

1 个答案:

答案 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