Я пытаюсь добавить подсказки по типу в один из моих кодов. Я использую mypy, чтобы проверить согласованность типов, объявленных в моем коде. Однако я обнаружил следующую ситуацию, которую не знаю как решить:
У меня довольно сложный словарь, который вообще имеет тип
Однако в некоторых случаях значения int могут отсутствовать и иметь значение None. Но по крайней мере один из двух будет там. Поэтому я объявил словарь как
Код: Выделить всё
dict[
tuple[
Union[
tuple[Optional[int], int],
tuple[int, Optional[int]]],
str],
str]
Однако, похоже, это не очень хорошо работает с mypy, поскольку у меня есть следующий код:
Код: Выделить всё
for (int1, int2), str in dict:
if int1 is None:
int2 + 3
else:
...
и mypy выдает следующий результат для строки «int2 + 3»:
Код: Выделить всё
error: Unsupported operand types for + ("None" and "int") [operator]
note: Left operand is of type "int | None"
Я знаю, что код работает, поскольку невозможно, чтобы int1 и int2 были равны None одновременно. Таким образом, поскольку строка будет выполняться только тогда, когда int1 имеет значение None, тогда int2 гарантированно будет int.
Моя подсказка о типе неверна? Или просто mypy не достаточно умен, чтобы это осознать?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... dictionary