When checking mypy does not give any errors, believes that everything is in order.
If after calling
FUNC2 Add line:
value_b = func1 ('11 ')
The error messages immediately go:
error: "func1" Does not return a value Error: Argument 1 to "Func1" HAS Incompatible Type "STR"; EXPECTED "INT"
Why Mypy ignores errors inside the
FUNC2 method ?
Answer 1, Authority 100%
Mypy does not check the code inside the functions that no annotations (apparently, it is done so that it is possible to add annotations gradually).
Exposure from the documentation:
There Are Several Common Reasons Why Obviously Wrong Code Is Not Flagged AS An Error.
- The Function Containing The Error Is Not Annotated. Functions That Do Not Have Any Annotations (Neiter for Any Argument Nor for the Return Type) Are Not Type-Checked, and Even The Most Blatant Type Errs (EG
2 + 'A') Pass Silently. The Solutions Is To Add Annotations. WHERE THAT ISNTATIONS CAN BE CHECKED USING
That is, if the second function, specify the return
- & gt returned value; None or when calling myPy Add the
- check-untyped-defs flag, then the code inside the second function will start checked:
$ mypy --check-untyped-defs test.py test.py:8: error: "Func1" Does Not Return A Value test.py:8: Error: Argument 1 to "Func1" HAS Incompatible Type "STR"; EXPECTED "INT" Found 2 Errors In 1 File (Checked 1 Source File)
For hardcore lovers, I can also recommend the
-Strict , when it is turned on, it will give a whole 4 errors:
$ mypy --Strict test.py test.py:6: Error: Function Is Missing A Return Type Annotation Test.PY: 6: Note: Use "- & gt; none" If Function Does Not Return A Value test.py:8: error: "Func1" Does Not Return A Value test.py:8: Error: Argument 1 to "Func1" HAS Incompatible Type "STR"; EXPECTED "INT" test.py:12: Error: Call to Untyped Function "Func2" in Typed Context Found 4 Errors In 1 File (Checked 1 Source File)
- Strict equivalent to turning on the following flags (list is obtained by running
Mypy -h ):
- Warn-Unused-Configs ,
- Disallow-Any-Generics ,
- Disallow-Subclassing-Any ,
- DiSallow-Untyped-Calls ,
- -disallow-unhyped-defs ,
- disallow-incomplete-defs ,
- check-untyped-defs ,
- Disallow-Untyped- Decorators ,
- No-implicit-optional ,
- Warn-Redundant-Casts ,
- Warn-Unused-Ignores ,
- Warn-Return-Any ,
- No-implicit-reexport ,
- Strict-Equality .
Actually, the desired option
- Check-Untyped-DEFS originally found the addition of all these flags and launching with the removal of flags one by one.