Следующий скрипт содержит преднамеренную ошибку типа:
def foo(x, y):
print(x[:y])
def main():
foo('abcde', '2')
if __name__ == "__main__":
main()
Ошибка может быть подтверждена запуском:
$ python3 untyped_test.py
Traceback (most recent call last):
File "untyped_test.py", line 8, in <module>
main()
File "untyped_test.py", line 5, in main
foo('abcde', '2')
File "untyped_test.py", line 2, in foo
print(x[:y])
TypeError: slice indices must be integers or None or have an __index__ method
Однако я надеялся поймать что-то подобное не тольково время выполнения, но перед выполнением кода, используя:
mypy --check-untyped-defs untyped_test.py
Но он не находит ошибок:
$ mypy --check-untyped-defs untyped_test.py
$ mypy --version
mypy 0.590
Только когда я комментирую foo
:
def foo(x: str, y: int):
print(x[:y])
Я получаю:
untyped_test.py:5: error: Argument 2 to "foo" has incompatible type "str"; expected "int"
Можно ли найти подобные ошибки без каких-либо ручных аннотаций типа?