On Sun, Sep 4, 2016 at 3:43 PM, Steven D'Aprano <st...@pearwood.info> wrote: [...] > [steve@ando ~]$ cat test.py > from typing import Optional > > def foo(x:Optional[int])->int: > if x is None: > return -1 > return x + 1 > > def bar(x:Optional[int])->int: > y = x # the type of y must be inferred > if y is None: > return y + 1 > return len(y) > > [steve@ando ~]$ mypy --strict-optional test.py > test.py: note: In function "bar": > test.py:11: error: Unsupported operand types for + (None and "int") > test.py:12: error: Argument 1 to "len" has incompatible type "int"; expected > "Sized" > > > foo passes the type check; bar fails. >
That's great. While mypy has nice features, these examples have little to do with PEP 526 as they don't have variable annotations, not even using comments. For some reason, pip install --upgrade mypy fails for me at the moment, but at least mypy version 0.4.1 does not allow this: from typing import Callable def foo(cond: bool, bar : Callable, baz : Callable) -> float: if cond: x = bar() # type: int else: x = baz() # type: float return x / 2 and complains that test.py:7: error: Name 'x' already defined". Maybe someone can confirm this with a newer version. Here, def foo(cond: bool) -> float: if cond: x = 1 else: x = 1.5 return x / 2 you get a different error: test.py:5: error: Incompatible types in assignment (expression has type "float", variable has type "int") Maybe someone can confirm this with a newer version, but IIUC this is still the case. >> I want a checker to check my code and, with minimal annotations, give me >> confidence that my code is correct > > Don't we all. > I would add *with minimal restrictions on how the code is supposed to be written* for type checking to work. It's not at all obvious that everyone thinks that way. Hence, the "Semantics for type checking" thread on python-ideas. -- Koos > > > -- > Steve > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/k7hoven%40gmail.com -- + Koos Zevenhoven + http://twitter.com/k7hoven + _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com