On Tue, Oct 20, 2020 at 8:52 PM John Snow <js...@redhat.com> wrote: > > Nested if conditions don't change when the exception block fires; we > need to explicitly re-raise the error if we didn't intend to capture and > suppress it. > > Signed-off-by: John Snow <js...@redhat.com> > Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > Message-id: 20201009175123.249009-3-js...@redhat.com > Signed-off-by: John Snow <js...@redhat.com> > --- > python/qemu/qmp.py | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/python/qemu/qmp.py b/python/qemu/qmp.py > index d911999da1..4969e5741c 100644 > --- a/python/qemu/qmp.py > +++ b/python/qemu/qmp.py > @@ -165,14 +165,15 @@ def __get_events(self, wait: Union[bool, float] = > False) -> None: > """ > > # Check for new events regardless and pull them into the cache: > - self.__sock.setblocking(False) > try: > + self.__sock.setblocking(False)
This change is not required. The idiom is: do stuff try: something finally: undo stuff If do stuff failed, there is no need to undo it. socket.setblocking() should not fail with EAGAIN, so it does not need to be inside the try block. > self.__json_read() > except OSError as err: > - if err.errno == errno.EAGAIN: > - # No data available > - pass > - self.__sock.setblocking(True) > + # EAGAIN: No data available; not critical > + if err.errno != errno.EAGAIN: > + raise In python 3 this can be simplified to: try: self.__json_read() except BlockingIOError: pass https://docs.python.org/3.6/library/exceptions.html#BlockingIOError > + finally: > + self.__sock.setblocking(True) > > # Wait for new events, if needed. > # if wait is 0.0, this means "no wait" and is also implicitly false. > -- > 2.26.2 Nir