Type Hint(타입 힌트) 점검?
타입 힌트의 필요성을 느껴 사용했다면, 이제 힌트를 제대로 적었는지 확인해야 한다.
파이썬은 Dynamic typing(동적 타이핑) 언어라서, 잘못된 힌트를 적었더라도 실행엔 아무런 이상이 없다.
그래서 힌트가 제대로 됐는지 확인할 수가 없다.
파이썬에서 타입 힌트가 제대로 됐는지 확인하려면 별도의 Type Checker(타입 체커)를 사용해야 한다.
타입 체커는 mypy
, pyright
, pytype
등이 있는데 이 중에서 mypy
와 pyright
가 많이 활용되고 있다.
주의할 점
타입 힌트가 파이썬에 도입됐지만, 타입 체커가 아직 정식으로 지원되는 것은 아니라고 한다. 따라서 전체 프로그램 코드를 모두 확인하기 보다는, 확인이 필요한 함수나 클래스만 따로 떼어서 Unit 단위로 테스트하는 것이 좋다고 한다.
pyright
pyright
는 다른 타입 체커 보다 훨씬 빠른 속도를 자랑한다.
또한 vscode의 pylance에 통합돼 있어 간편하게 사용할 수 있다는 장점이 있다.
물론 별도로 pip 패키지를 설치해서도 사용할 수 있다.
vscode를 활용한 사용법
pyright
는 pylance에 통합돼 있다.
따라서 pylance를 설치한 뒤 vscode의 settings에서 python.analysis.typeCheckingMode
을 basic
혹은 strict
로 변경하면 된다. 참고로 basic과 strict 모드 차이는 다음과 같다.
basic: Non-type checking-related rules (all rules in off) + basic type checking rules
strict: All type checking rules at the highest severity of error (includes all rules in off and basic categories)
pylance를 통해 pyright
를 사용하면, 잘못된 타입 힌트에 대한 경고가 vscode의 problems 영역에 표시된다. 실제로 다음 코드에선 타입 힌트가 Union[str]
로 돼 있지만, 실제로는 int
데이터도 있기 때문에 에러가 발생했다.
- 혹시 안된다면 extentions중 python for vscode를 제거하면 된다. (아마도...)
from typing import Dict, Union
# test의 value가 int도 포함돼야 하지만 안 적혀 있음 -> type check 시 에러 발생
test: Dict[str, Union[str]] = {"hello": "world", "world": "wow!!", "hee": 17}
별도로 패키지 설치해서 사용하기
간단하게 pip install pyright
를 사용해서 설치하면 된다.
사용은 pyright 파일명.py
으로 굉장히 단순하다.
pip install pyright # 설치
pyright 파일명.py # pyright 실행
pyright 파일명.py && python 파일명.py # type check 이상 없을 시 파일 실행
mypy
mypy
는 vscode의 linters에 통합돼 있다.
하지만 linter로는 좀 더 용도에 맞는 다른 것을 사용(flake8...)하고
mypy
는 별도로 설치하는 것을 추천한다.
별도로 패키지 설치해서 사용하기
python3 -m pip install mypy
를 사용해서 설치하면 된다.
사용은mypy
파일명.py으로 굉장히 단순하다.
python3 -m pip install mypy # 설치
mypy 파일명.py # 실행
mypy 파일명.py && python 파일명.py # type check 이상 없을 시 파일 실행
type check 에러가 발생할 경우 다음과 같이 알려준다.
test.py:4: error: Dict entry 2 has incompatible type "str": "int"; expected "str": "str"
Found 1 error in 1 file (checked 1 source file)
참고
- pyright의 깃허브 저장소이다.
- mypy의 Docs이다.