Django-rest-framework: Create debería dar excepciones mucho más útiles cuando se produce TypeError

Creado en 15 oct. 2015  ·  3Comentarios  ·  Fuente: encode/django-rest-framework

Esta es la ruina de mi vida. La línea 845 en serializers.py debe cambiarse para que sea mucho más útil cuando ocurre un TypeError.

Si tiene métodos .save() personalizados y algo sale mal, DRF solo le da el mensaje de excepción, que podría ser tan útil como "X no es iterable". ¿Puede DRF quizás incluir el rastreo del TypeError original o hacer _algo_ un poco más útil que escupir un mensaje predeterminado y tragarse la excepción original?

Comentario más útil

Hola,
Realmente me gustaría volver a abrir este tema. Esta es realmente la peor parte de usar DRF en cualquier aplicación no trivial. Aquí está la excepción que estoy recibiendo:

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.

Entiendo que está tratando de ser útil al mostrar ese texto, pero en realidad se está tragando toda la excepción, lo que hace que sea mucho más difícil depurar y descartar la mayor parte de la información realmente útil. Por favor, considere mi MR.

Todos 3 comentarios

Estaría feliz de considerar las solicitudes de extracción, pero de lo contrario no es obvio qué deberíamos hacer de manera diferente aquí. Incluimos el texto de excepción original, pero agregamos un poco de contexto adicional para explicar por qué se genera. No tengo idea si podemos (o quisiéramos) preservar el rastreo original.

Hice un PR, creo que deberías mostrar el rastreo original en el mensaje. Para ser honesto, creo que no debería detectar la excepción en absoluto, pero supongo que el mensaje modificado podría ser útil para los nuevos usuarios. Sin embargo, se está tragando información de error importante sin motivo real, que debería cambiarse.

Hola,
Realmente me gustaría volver a abrir este tema. Esta es realmente la peor parte de usar DRF en cualquier aplicación no trivial. Aquí está la excepción que estoy recibiendo:

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.

Entiendo que está tratando de ser útil al mostrar ese texto, pero en realidad se está tragando toda la excepción, lo que hace que sea mucho más difícil depurar y descartar la mayor parte de la información realmente útil. Por favor, considere mi MR.

¿Fue útil esta página
0 / 5 - 0 calificaciones