3 ms·
The real problem, as others point out, is not using a linter to catch errors before runtime. Mypy flags this problem through static analysis. You’re right I’m
by goodside 8y ago
The real problem, as others point out, is not using a linter to catch errors before runtime. Mypy flags this problem through static analysis.
You’re right I’m being uncharitable by saying “understanding”. I’m annoyed he bothered writing an accusatory blog post about this aspect of the language without mentioning any of the alternative syntax proposals helpfully discussed in the PEP, or exploring why annotations work this way. The designers have been very transparent and conservative in considering different ways of doing it, and the OP doesn’t offer any ideas for improving the interpreter, or note that the behavior he’s complaining about will be fixed in 3.8.
- lukeschlather 8y ago> Mypy flags this problem through static analysis. The problem is that there's not really such a thing as static analysis in python. For example, if I wrap it in a function like this, mypy doesn't complain at all. def blah(): ages = {} ages['John']: 42 print(ages['John']) return ages
- goodside 8y agoMypy intentionally does not check annotations inside untyped `def` statements. This is a feature meant to make it easier to gradually introduce types in code that wasn't intended to be typechecked. If you call mypy with the flag `--check-untyped-defs` or just annotate the function with anything at all, you will see mypy checks the inside of the function: from typing import Any def blah() -> Any: ... I'm not sure what you mean by "there's not really such a thing as static analysis" in Python -- that's exactly what Mypy does.
- lukeschlather 8y agoCool, I knew I had to be missing something. You're right of course.