diff mbox series

[1/1] sphinx/qapidoc: Tidy up pylint warning raise-missing-from

Message ID 20231025092159.1782638-2-armbru@redhat.com
State New
Headers show
Series sphinx/qapidoc: pylint cleanups | expand

Commit Message

Markus Armbruster Oct. 25, 2023, 9:21 a.m. UTC
Pylint advises:

    docs/sphinx/qapidoc.py:518:12: W0707: Consider explicitly re-raising using 'raise ExtensionError(str(err)) from err' (raise-missing-from)

From its manual:

    Python's exception chaining shows the traceback of the current
    exception, but also of the original exception.  When you raise a
    new exception after another exception was caught it's likely that
    the second exception is a friendly re-wrapping of the first
    exception.  In such cases `raise from` provides a better link
    between the two tracebacks in the final error.

Makes sense, so do it.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 docs/sphinx/qapidoc.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

John Snow Nov. 3, 2023, 3:08 a.m. UTC | #1
On Wed, Oct 25, 2023 at 6:10 AM Markus Armbruster <armbru@redhat.com> wrote:
>
> Pylint advises:
>
>     docs/sphinx/qapidoc.py:518:12: W0707: Consider explicitly re-raising using 'raise ExtensionError(str(err)) from err' (raise-missing-from)
>
> From its manual:
>
>     Python's exception chaining shows the traceback of the current
>     exception, but also of the original exception.  When you raise a
>     new exception after another exception was caught it's likely that
>     the second exception is a friendly re-wrapping of the first
>     exception.  In such cases `raise from` provides a better link
>     between the two tracebacks in the final error.
>
> Makes sense, so do it.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

In this case it probably doesn't make a difference because Sphinx has
its own formatting for displaying the errors, but it's good hygiene.

Reviewed-by: John Snow <jsnow@redhat.com>

> ---
>  docs/sphinx/qapidoc.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
> index 8f3b9997a1..658c288f8f 100644
> --- a/docs/sphinx/qapidoc.py
> +++ b/docs/sphinx/qapidoc.py
> @@ -515,7 +515,7 @@ def run(self):
>          except QAPIError as err:
>              # Launder QAPI parse errors into Sphinx extension errors
>              # so they are displayed nicely to the user
> -            raise ExtensionError(str(err))
> +            raise ExtensionError(str(err)) from err
>
>      def do_parse(self, rstlist, node):
>          """Parse rST source lines and add them to the specified node
> --
> 2.41.0
>
>
Peter Maydell Nov. 3, 2023, 10:31 a.m. UTC | #2
On Fri, 3 Nov 2023 at 03:08, John Snow <jsnow@redhat.com> wrote:
>
> On Wed, Oct 25, 2023 at 6:10 AM Markus Armbruster <armbru@redhat.com> wrote:
> >
> > Pylint advises:
> >
> >     docs/sphinx/qapidoc.py:518:12: W0707: Consider explicitly re-raising using 'raise ExtensionError(str(err)) from err' (raise-missing-from)
> >
> > From its manual:
> >
> >     Python's exception chaining shows the traceback of the current
> >     exception, but also of the original exception.  When you raise a
> >     new exception after another exception was caught it's likely that
> >     the second exception is a friendly re-wrapping of the first
> >     exception.  In such cases `raise from` provides a better link
> >     between the two tracebacks in the final error.
> >
> > Makes sense, so do it.
> >
> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
>
> In this case it probably doesn't make a difference because Sphinx has
> its own formatting for displaying the errors, but it's good hygiene.
>
> Reviewed-by: John Snow <jsnow@redhat.com>

Has somebody checked that the error Sphinx shows to the user
is still the friendly one? The only reason to raise
this error is so that Sphinx will catch it and display
the friendly string, so anything about tracebacks is a red
herring -- if the traceback is shown to the user then we got
something wrong.

thanks
-- PMM
Markus Armbruster Nov. 3, 2023, 4:02 p.m. UTC | #3
Peter Maydell <peter.maydell@linaro.org> writes:

> On Fri, 3 Nov 2023 at 03:08, John Snow <jsnow@redhat.com> wrote:
>>
>> On Wed, Oct 25, 2023 at 6:10 AM Markus Armbruster <armbru@redhat.com> wrote:
>> >
>> > Pylint advises:
>> >
>> >     docs/sphinx/qapidoc.py:518:12: W0707: Consider explicitly re-raising using 'raise ExtensionError(str(err)) from err' (raise-missing-from)
>> >
>> > From its manual:
>> >
>> >     Python's exception chaining shows the traceback of the current
>> >     exception, but also of the original exception.  When you raise a
>> >     new exception after another exception was caught it's likely that
>> >     the second exception is a friendly re-wrapping of the first
>> >     exception.  In such cases `raise from` provides a better link
>> >     between the two tracebacks in the final error.
>> >
>> > Makes sense, so do it.
>> >
>> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
>>
>> In this case it probably doesn't make a difference because Sphinx has
>> its own formatting for displaying the errors, but it's good hygiene.
>>
>> Reviewed-by: John Snow <jsnow@redhat.com>
>
> Has somebody checked that the error Sphinx shows to the user
> is still the friendly one? The only reason to raise
> this error is so that Sphinx will catch it and display
> the friendly string, so anything about tracebacks is a red
> herring -- if the traceback is shown to the user then we got
> something wrong.

The exception type doesn't change, only the backtrace stored within the
exception.  Can't see how its catching could be affected.

To be sure, stick a '} at the beginning of qapi-schema.json and run
sphinx-build.  Result:

    Extension error:
    /work/armbru/qemu/docs/../qapi/qapi-schema.json:1:1: expected '{', '[', string, or boolean

Satisfied?
Peter Maydell Nov. 3, 2023, 4:17 p.m. UTC | #4
On Fri, 3 Nov 2023 at 16:02, Markus Armbruster <armbru@redhat.com> wrote:
>
> Peter Maydell <peter.maydell@linaro.org> writes:
>
> > On Fri, 3 Nov 2023 at 03:08, John Snow <jsnow@redhat.com> wrote:
> >>
> >> On Wed, Oct 25, 2023 at 6:10 AM Markus Armbruster <armbru@redhat.com> wrote:
> >> >
> >> > Pylint advises:
> >> >
> >> >     docs/sphinx/qapidoc.py:518:12: W0707: Consider explicitly re-raising using 'raise ExtensionError(str(err)) from err' (raise-missing-from)
> >> >
> >> > From its manual:
> >> >
> >> >     Python's exception chaining shows the traceback of the current
> >> >     exception, but also of the original exception.  When you raise a
> >> >     new exception after another exception was caught it's likely that
> >> >     the second exception is a friendly re-wrapping of the first
> >> >     exception.  In such cases `raise from` provides a better link
> >> >     between the two tracebacks in the final error.
> >> >
> >> > Makes sense, so do it.
> >> >
> >> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
> >>
> >> In this case it probably doesn't make a difference because Sphinx has
> >> its own formatting for displaying the errors, but it's good hygiene.
> >>
> >> Reviewed-by: John Snow <jsnow@redhat.com>
> >
> > Has somebody checked that the error Sphinx shows to the user
> > is still the friendly one? The only reason to raise
> > this error is so that Sphinx will catch it and display
> > the friendly string, so anything about tracebacks is a red
> > herring -- if the traceback is shown to the user then we got
> > something wrong.
>
> The exception type doesn't change, only the backtrace stored within the
> exception.  Can't see how its catching could be affected.
>
> To be sure, stick a '} at the beginning of qapi-schema.json and run
> sphinx-build.  Result:
>
>     Extension error:
>     /work/armbru/qemu/docs/../qapi/qapi-schema.json:1:1: expected '{', '[', string, or boolean
>
> Satisfied?

Yep, looks good, thanks. (That is, this change is purely
to shut up pylint, and it doesn't have any bad side effects.)

-- PMM
diff mbox series

Patch

diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
index 8f3b9997a1..658c288f8f 100644
--- a/docs/sphinx/qapidoc.py
+++ b/docs/sphinx/qapidoc.py
@@ -515,7 +515,7 @@  def run(self):
         except QAPIError as err:
             # Launder QAPI parse errors into Sphinx extension errors
             # so they are displayed nicely to the user
-            raise ExtensionError(str(err))
+            raise ExtensionError(str(err)) from err
 
     def do_parse(self, rstlist, node):
         """Parse rST source lines and add them to the specified node