[Python-Dev] What should a good type checker do? (was: Please reject or postpone PEP 526)
Random832
random832 at fastmail.com
Fri Sep 2 19:14:53 EDT 2016
On Fri, Sep 2, 2016, at 18:49, Koos Zevenhoven wrote:
> Then again, (b) instead of that being working code, it might be an
> error and spam only takes float. No problem, the type checker will
> catch that.
There are very few functions that should only take float and not int.
> On Fri, Sep 2, 2016 at 9:04 PM, Steven D'Aprano <steve at pearwood.info>
> wrote:
> > Maybe you think that it's okay because ints and floats are somewhat
> > compatible. But suppose I wrote:
> >
> > if cond:
> > x = HTTPServer(*args)
> > else:
> > x = 1.5
>
> It might be clear by now, but no, that's not why I wrote that. That
> was just a slightly more "realistic" example than this HTTP & 1.5 one.
The other thing is... I'd kind of want it to infer Number in the first
case.
And if I assign both a list and a generator expression to something,
that should be Iterable[whatever] and maybe even whatever gets worked
out for "proper iterable and not string or bytes or memoryview".
Certainly if you can return HTTPServer() or None it should infer
Union[HTTPServer, None], otherwise spelled Optional[HTTPServer].
Maybe what we need is a "protoize"-alike that can run through a source
file and produce a stub file with all its inferences, for manual
inspection. So if you see something nonsensical like Union[HTTPServer,
float] you can think "wait a minute, where's that coming from" and go
look at the code.
More information about the Python-Dev
mailing list