来自Django的代码教程:
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# The rest of code...
为什么我们在这里有两个例外:KeyError
和Choice.DoesNotExist
?
他们不平等吗? 它们之间有什么区别?
答案 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
未被捕获,反之亦然。