Ошибка mypy с условными необязательными целыми числами в словареPython

Программы на Python
Ответить
Anonymous
 Ошибка mypy с условными необязательными целыми числами в словаре

Сообщение Anonymous »

Я пытаюсь добавить подсказки по типу в один из моих кодов. Я использую mypy, чтобы проверить согласованность типов, объявленных в моем коде. Однако я обнаружил следующую ситуацию, которую не знаю как решить:
У меня довольно сложный словарь, который вообще имеет тип

Код: Выделить всё

dict[tuple[tuple[int, int], str], str]
Однако в некоторых случаях значения 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»