All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: "Lukáš Doktor" <ldoktor@redhat.com>
Cc: qemu-devel@nongnu.org, famz@redhat.com, apahim@redhat.com,
	mreitz@redhat.com, f4bug@amsat.org, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 05/10] qemu.py: Use custom exceptions rather than Exception
Date: Wed, 26 Jul 2017 10:00:25 -0300	[thread overview]
Message-ID: <20170726130025.GD20793@localhost.localdomain> (raw)
In-Reply-To: <e9246b9c-c004-3647-edb7-44e849f33f94@redhat.com>

On Wed, Jul 26, 2017 at 06:39:28AM +0200, Lukáš Doktor wrote:
> Dne 25.7.2017 v 18:06 Eduardo Habkost napsal(a):
> > On Tue, Jul 25, 2017 at 05:09:46PM +0200, Lukáš Doktor wrote:
> >> The naked Exception should not be widely used. It makes sense to be a
> >> bit more specific and use better-suited custom exceptions. As a benefit
> >> we can store the full reply in the exception in case someone needs it
> >> when catching the exception.
> >>
> >> Signed-off-by: Lukáš Doktor <ldoktor@redhat.com>
> >> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
> >> ---
> >>  scripts/qemu.py | 17 +++++++++++++++--
> >>  1 file changed, 15 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/scripts/qemu.py b/scripts/qemu.py
> >> index 5948e19..e6df54c 100644
> >> --- a/scripts/qemu.py
> >> +++ b/scripts/qemu.py
> >> @@ -19,6 +19,19 @@ import subprocess
> >>  import qmp.qmp
> >>  
> >>  
> >> +class MonitorResponseError(qmp.qmp.QMPError):
> >> +    '''
> >> +    Represents erroneous QMP monitor reply
> >> +    '''
> >> +    def __init__(self, reply):
> >> +        try:
> >> +            desc = reply["error"]["desc"]
> >> +        except KeyError:
> >> +            desc = reply
> >                       ^^^ (*)
> >> +        super(MonitorResponseError, self).__init__(repr(desc))
> > 
> > This will end up calling Exception.__init__.  I previously
> > suggested repr(desc) above(*) because I didn't know what happened
> > when the Exception.__init__ argument is not a string.
> > 
> > I couldn't find any documentation on the right argument types for
> > Exception.__init__.  The examples in the Python documentation[1]
> > don't call Exception.__init__ at all: they simply implement
> > __str__().
> > 
> > However, based on my testing and on the BaseException
> > documentation[2], I believe repr() isn't really necessary:
> > 
> > "If str() or unicode() is called on an instance of this class,
> > the representation of the argument(s) to the instance are
> > returned, or the empty string when there were no arguments."
> > 
> > So your previous version was good, already.
> > 
> > But maybe we could do this instead, to make the constructor as
> > simple as possible:
> > 
> > class MonitorResponseError(qmp.qmp.QMPError):
> >     def __init__(self, reply):
> >         self.reply = reply
> > 
> >     def __str__(self):
> >         return self.reply.get('error', {}).get('desc', repr(self.reply))
> > 
> Well I know I can implement custom `__str__` class, but the
> default one simply stores the argument as string and reports
> it, so for simple strings I usually go with super call and with
> complex ones with custom `__str__`. Anyway if this suits this
> project style better I'll change it in v2.

If you prefer it, your previous version (without repr) was good
enough to me.

-- 
Eduardo

  reply	other threads:[~2017-07-26 13:09 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-25 15:09 [Qemu-devel] [PATCH v2 00/10] qemu.py: Pylint/style fixes Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 01/10] " Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 02/10] qemu|qtest: Avoid dangerous arguments Lukáš Doktor
2017-07-25 17:14   ` John Snow
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 03/10] qemu.py: Use iteritems rather than keys() Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 04/10] qemu.py: Simplify QMP key-conversion Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 05/10] qemu.py: Use custom exceptions rather than Exception Lukáš Doktor
2017-07-25 16:06   ` Eduardo Habkost
2017-07-26  4:39     ` Lukáš Doktor
2017-07-26 13:00       ` Eduardo Habkost [this message]
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 06/10] qmp.py: Couple of pylint/style fixes Lukáš Doktor
2017-07-25 15:18   ` Philippe Mathieu-Daudé
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 07/10] qmp.py: Use object-based class for QEMUMonitorProtocol Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 08/10] qmp.py: Avoid "has_key" usage Lukáš Doktor
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 09/10] qmp.py: Avoid overriding a builtin object Lukáš Doktor
2017-07-25 19:34   ` Eduardo Habkost
2017-07-26  4:46     ` Lukáš Doktor
2017-07-26 13:01       ` Eduardo Habkost
2017-07-25 15:09 ` [Qemu-devel] [PATCH v2 10/10] qtest.py: Few pylint/style fixes Lukáš Doktor
2017-07-25 17:19   ` John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170726130025.GD20793@localhost.localdomain \
    --to=ehabkost@redhat.com \
    --cc=apahim@redhat.com \
    --cc=armbru@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=famz@redhat.com \
    --cc=ldoktor@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.