如何导入Django DoesNotExist异常?

Bry*_*ock 116 django unit-testing exception

我正在尝试创建一个UnitTest来验证对象是否已被删除.

from django.utils import unittest
def test_z_Kallie_can_delete_discussion_response(self):
  ...snip...
  self._driver.get("http://localhost:8000/questions/3/want-a-discussion") 
  self.assertRaises(Answer.DoesNotExist, Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>'))
Run Code Online (Sandbox Code Playgroud)

我一直收到错误:

DoesNotExist: Answer matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 175

您也可以导入ObjectDoesNotExistdjango.core.exceptions,如果你想有一个通用的,不依赖模型的方法来捕获异常:

from django.core.exceptions import ObjectDoesNotExist

try:
    SomeModel.objects.get(pk=1)
except ObjectDoesNotExist:
    print 'Does Not Exist!'
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 125

您不需要导入它 - 正如您已经正确编写的那样DoesNotExist,在这种情况下是模型本身的属性Answer.

你的问题是你get在传递之前调用了方法 - 它引发了异常assertRaises.您需要将参数与callable分开,如unittest文档中所述:

self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact='<p>User can reply to discussion.</p>')
Run Code Online (Sandbox Code Playgroud)

或更好:

with self.assertRaises(Answer.DoesNotExist):
    Answer.objects.get(body__exact='<p>User can reply to discussion.</p>')
Run Code Online (Sandbox Code Playgroud)


def*_*rex 10

DoesNotExist始终是不存在的模型的属性.在这种情况下,它会Answer.DoesNotExist.