Django中的声明除外

时间:2013-09-13 11:17:52

标签: django python-2.7

来自Django的代码教程:

try:
    selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# The rest of code...

为什么我们在这里有两个例外:KeyErrorChoice.DoesNotExist

他们不平等吗? 它们之间有什么区别?

2 个答案:

答案 0 :(得分:4)

KeyError可能会被request.POST ['choice']引发。当您尝试访问不存在的密钥时,引发的字典会出现python错误。

DoesNotExist是当您尝试从数据库中获取对象并且它不存在时引发的数据库接口的django框架错误。

Choice.DoesNotExist继承自DoesNotExist但仅适用于Choice模型,因此当您执行Choice.objects.get(...)之类的操作时会引发该实例,并且该实例不存在。

答案 1 :(得分:0)

如果request.POST['choice']失败,将生成KeyError

另一个是:

异常ObjectDoesNotExist

The DoesNotExist exception is raised when an object is not found for the given parameters of a query.

现在,如果你没有放KeyError,系统会引发错误,except将无用,因为KeyError未被捕获,反之亦然。