Pylint raise-missing-from

And*_*lan 48 python pylint

我在这段代码中有一条 pylint 消息(w0707)(来自https://www.django-rest-framework.org/tutorial/3-class-based-views/):

class SnippetDetail(APIView):
    """
    Retrieve, update or delete a snippet instance.
    """
    def get_object(self, pk):
        try:
            return Snippet.objects.get(pk=pk)
        except Snippet.DoesNotExist:
            raise Http404
Run Code Online (Sandbox Code Playgroud)

信息是:
Consider explicitly re-raising using the 'from' keyword
我不太明白如何采取行动来纠正问题。
预先感谢您的帮助

Dan*_*ter 71

上面对您的问题的评论中的链接概述了问题并提供了解决方案,但为了清楚那些像我一样直接登陆此页面的人,而不必转到另一个线程,阅读并获取上下文,这里是您的答案具体问题:

TL; 博士;

这可以通过为您“排除”的 Exception 取别名并在您的第二次加注中引用它来简单地解决。

使用上面的代码片段,请参阅底部两行,我添加了“under-carets”来表示我添加的内容。

class SnippetDetail(APIView):
    """
    Retrieve, update or delete a snippet instance.
    """
    def get_object(self, pk):
        try:
            return Snippet.objects.get(pk=pk)
        except Snippet.DoesNotExist as snip_no_exist:
#                                   ^^^^^^^^^^^^^^^^
            raise Http404 from snip_no_exist
#                         ^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

注意:别名可以是任何格式正确的字符串。

  • 这解释了如何解决它,但没有解释*为什么*。有/没有“from”类的回溯几乎是相同的。我没有看到使用“from”语句带来的附加值。是否有“技术”原因强化了使用“from”的论点? (20认同)
  • 以下文章很好地解释了原因:https://stefan.sofa-rockers.org/2020/10/28/raise-from/ 它归结为如何呈现异常 - 使用什么措辞。 (13认同)
  • 正确,确实如此 - 这就是作为 TLDR 的答案的目的,对于那些像我一样在谷歌的第一个结果上点击此页面并希望快速得到答案的人。对于那些想了解背后技术原因的人来说,问题评论上的链接可以很好地做到这一点。(/sf/ask/1732667681/) (4认同)