Nathaniel:

What do you think of the proposal regarding DistutilsUnsupportedOperation?

2017-08-25 16:13 GMT-05:00 Nathaniel Smith <n...@pobox.com>:

> On Fri, Aug 25, 2017 at 9:49 AM, Thomas Kluyver <tho...@kluyver.me.uk>
> wrote:
> > Can I gently ask everyone involved to consider whether the
> > notimplemented/error discussion is verging into bikeshedding
> > (http://bikeshed.org/)?
> >
> > The technical arguments I have seen so far are:
> > - The exception can include a message
> > - The return value can't 'bubble up' from the internals of a hook like an
> > exception
>
> I believe Nick also feels that an important advantage of
> NotImplementedError is: if a frontend doesn't bother to properly
> implement the spec and special case NotImplemented, then you'll end up
> eventually getting some obscure error like "'NotImplementedType'
> object has no attribute ..." when it tries to treat it as a normal
> return value. With NotImplementedError, if the frontend doesn't treat
> it specially, the default is to treat it like other exceptions and
> show a proper traceback and error message. So lazy frontends give
> better UX for NotImplementedError than NotImplemented.
>
> Personally, I don't find the argument about lazy frontends terribly
> compelling because if we're assuming that we're hitting some buggy
> corner case with code not following the spec, then we should also
> consider the case of accidentally bubbled NotImplementedErrors.
> Between these two cases, an accidentally bubbled NotImplementedError
> causes even more confusing outcomes (the build frontend may silently
> start invoking other things! vs. a suboptimal error message), and it's
> harder to guard against (both designs require properly written
> frontends to contain a few lines of code special casing
> NotImplemented/NotImplementedError; only NotImplementedError also
> requires all careful *backends* to contain just-in-case try/except
> guards).
>
> Another minor point that's made me less happy with NotImplemented is:
> originally I thought we could make it a general fact about all the
> hooks that returning "NotImplemented" should be treated the same as if
> the hook were undefined. (Which is pretty much how it works for
> __binop__ methods.) On further consideration though I don't think this
> is a good idea. (Rationale: it's not really what we want for
> get_build_requires_for_sdist, & if we define future hooks that
> normally have no return value then there's a danger of buggy frontends
> missing it entirely, & it wouldn't have worked for Nick's suggestion
> that build_wheel(build_directory=foo) triggering a NotImplemented
> should fall back to build_wheel(build_directory=None), which is gone
> from the spec now but suggests that this could cause problems in the
> future.) So the bottom line of all this is that if we do go with
> NotImplemented, I now think it should only be a defined return value
> for get_requires_for_build_sdist and build_sdist, and should have
> special "sorry I can't do that Dave" semantics that are different from
> e.g. a missing get_requires_for_build_sdist hook. All of which will
> work fine, it's just less... aesthetically pleasing.
>
> Personally, I still have a weak preference for NotImplemented over
> NotImplementedError, but I don't care enough to have a big fight about
> it.
>
> It sounds like Nick and Donald are the only two folks who really have
> strong opinions here: can the two of you work something out? Should we
> flip a coin?
>
> -n
>
> --
> Nathaniel J. Smith -- https://vorpus.org
> _______________________________________________
> Distutils-SIG maillist  -  Distutils-SIG@python.org
> https://mail.python.org/mailman/listinfo/distutils-sig
>
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to