Django-rest-framework: TypeErrorが発生した場合、Createははるかに便利な例外を提供するはずです

作成日 2015年10月15日  ·  3コメント  ·  ソース: encode/django-rest-framework

これは私の人生の悩みの種です。 TypeErrorが発生した場合に役立つように、serializers.pyの845行目を変更する必要があります。

カスタムの.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.

そのテキストを表示することで役立つようにしようとしているようですが、実際には例外全体を飲み込んでいるため、デバッグが非常に難しくなり、実際に役立つ情報のほとんどが破棄されます。 私のMRを考慮してください。

全てのコメント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.

そのテキストを表示することで役立つようにしようとしているようですが、実際には例外全体を飲み込んでいるため、デバッグが非常に難しくなり、実際に役立つ情報のほとんどが破棄されます。 私のMRを考慮してください。

このページは役に立ちましたか?
0 / 5 - 0 評価