Django-rest-framework: 当 TypeError 发生时,创建应该提供更多有用的异常

创建于 2015-10-15  ·  3评论  ·  资料来源: encode/django-rest-framework

这是我人生的祸根。 需要更改serializers.py 中的第 845 行,以便在确实发生 TypeError 时更有帮助。

如果您有自定义的 .save() 方法并且出现问题,那么 DRF 只会给您异常消息,这可能与“X 不可迭代”一样有用。 DRF 是否可以包含原始 TypeError 的回溯,或者做一些比吐出默认消息并吞下原始异常更有用的东西?

最有用的评论

你好呀,
我真的很想重新打开这个问题。 这确实是在任何重要的应用程序中使用 DRF 最糟糕的部分。 这是我得到的例外:

TypeError: Got a `TypeError` when calling `Document.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `Document.objects.create()`. You may need to make the field read-only, or override the DocumentSerializer.create() method to handle this correctly.
Original exception text was: 'SafeText' object is not callable.

我知道您试图通过显示该文本来提供帮助,但实际上您正在吞下整个异常,这使得调试和丢弃大部分实际有用的信息变得更加困难。 请考虑我的先生。

所有3条评论

我很乐意考虑拉取请求,但除此之外,我们应该在这里做不同的事情。 我们包含了原始异常文本,但添加了一些额外的上下文来解释为什么会出现它。 不知道我们是否可以(或想要)保留原始回溯。

我做了一个 PR,我认为你应该在消息中显示原始回溯。 老实说,我认为您根本不应该捕获异常,但我想修改后的消息可能对新用户有所帮助。 然而,它无缘无故地吞下了重要的错误信息,应该改变它。

你好呀,
我真的很想重新打开这个问题。 这确实是在任何重要的应用程序中使用 DRF 最糟糕的部分。 这是我得到的例外:

TypeError: Got a `TypeError` when calling `Document.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `Document.objects.create()`. You may need to make the field read-only, or override the DocumentSerializer.create() method to handle this correctly.
Original exception text was: 'SafeText' object is not callable.

我知道您试图通过显示该文本来提供帮助,但实际上您正在吞下整个异常,这使得调试和丢弃大部分实际有用的信息变得更加困难。 请考虑我的先生。

此页面是否有帮助?
0 / 5 - 0 等级