[Python-Dev] Please reject or postpone PEP 526 (original) (raw)

Mark Shannon mark at hotpy.org
Sun Sep 4 06:15:30 EDT 2016


On 02/09/16 19:04, Steven D'Aprano wrote:

On Fri, Sep 02, 2016 at 08:10:24PM +0300, Koos Zevenhoven wrote:

A good checker should be able to infer that x is a union type at the point that it's passed to spam, even without the type annotation. For example:

def eggs(cond:bool): if cond: x = 1 else: x = 1.5 spam(x) # a good type checker infers that x is of type Union[int, float] Oh I really hope not. I wouldn't call that a good type checker. I would call that a type checker that is overly permissive. Why would that be overly permissive? It infers the most precise type possible.

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 Would you want the checker to infer Union[HTTPServer, float]? I wouldn't. I would want the checker to complain that the two branches of the if result in different types for x. If I really mean it, then I can give a type-hint. Yes, the checker would infer that the type of x (strictly, all uses of x that are defined by these definitions) is Union[HTTPServer, float].

You example is incomplete, what do you do with x? If you pass x to a function that takes Union[HTTPServer, float] then there is no error. If you pass it to a function that takes a number then you get an error: "Cannot use HTTPServer (from line 2) as Number (line ...)" as one would expect.

When it comes to checkers, people hate false positives. Flagging correct code as erroneous because it is bad 'style' is really unpopular.

In any case, this PEP isn't about specifying when to declare variable types, it is for picking syntax. Do you have a better idea for variable syntax?

No. I think that defining the type of variables, rather than expressions is a bad idea.

Cheers, Mark.



More information about the Python-Dev mailing list