Предположим, следующий тест
Код: Выделить всё
class Foo:
def __init__(self):
self.value: int | None = None
def set_value(self, value: int | None):
self.value = value
def test_foo():
foo = Foo()
assert foo.value is None
foo.set_value(1)
assert isinstance(foo.value, int)
assert foo.value == 1 # unreachable
- Сначала проверяется, является ли foo.value чем-то
- Затем устанавливается значение с помощью метода.
- Затем проверяется, что foo.value изменилось.
Код: Выделить всё
(venv) niko@niko-ubuntu-home:~/code/myproj$ python -m mypy tests/test_foo.py
tests/test_foo.py:16: error: Statement is unreachable [unreachable]
Found 1 error in 1 file (checked 1 source file)
- В mypy GitHub есть открытая проблема: https://github.com/python/mypy/issues/11969 В одном комментарии говорилось, что нужно использовать Safe-assert, но после переписывания теста как
Код: Выделить всё
from safe_assert import safe_assert
def test_foo():
foo = Foo()
safe_assert(foo.value is None)
foo.set_value(1)
safe_assert(isinstance(foo.value, int))
assert foo.value == 1
Вопрос
Как я могу сказать mypy, что foo.value изменилось на int и что он должен продолжать проверять также все, что находится в строке Assert isinstance(foo.value, int)?
[1] ОБНОВЛЕНИЕ: в Safe_assert версии 0.5.0 проблема устранена
Подробнее здесь: https://stackoverflow.com/questions/782 ... setting-at
Мобильная версия