微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 测试:“with self.assertRaises()...”和简单的“self.assertRaises”有什么区别

如何解决Django 测试:“with self.assertRaises()...”和简单的“self.assertRaises”有什么区别

能否请您帮助我了解 Django 测试(Python 3.7)中这两种语法之间的区别:

def test_updateItem_deletion(self):
   # some logic in here
    with self.assertRaises(OrderItem.DoesNotExist):
        OrderItem.objects.get(id=self.product_1.id)

还有:

  # all the same,but self.assertRaises not wrapped in 'with'
   self.assertRaises(OrderItem.DoesNotExist,OrderItem.objects.get(id=self.product_1.id))

一个工作并且测试通过。但是第二个提出:

models.OrderItem.DoesNotExist:OrderItem 匹配查询不存在。

它是否以某种方式复制了 try/catch 块的行为? 非常感谢!

解决方法

如果作为上下文管理器执行,第一个将捕获引发的异常。 在第二个中,没有什么可以捕获异常。

这称为上下文管理器。使用 with 语句时,会在 with 块的末尾调用 __exit__ 方法,其中包含块执行期间引发的任何异常。

直接调用assertRaises时不会调用这个__exit__方法,所以没有捕获异常。

您将在此处找到有关此的更多信息:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。