Код: Выделить всё
"expiryTime"
Код: Выделить всё
error: Incompatible types in assignment (expression has type "datetime", target has type "str") [assignment]
< /code>
Вот упрощенная версия кода: < /p>
from datetime import datetime
# Initial dictionary with string value
token_dict: dict[str, str] = {"expiryTime": "2025-01-23T12:34:56"}
# Convert the string to datetime
expiry_time_dt = datetime.strptime(token_dict["expiryTime"], "%Y-%m-%dT%H:%M:%S")
token_dict["expiryTime"] = expiry_time_dt # Error here: incompatible types
Мой вопрос:
Как лучше всего справиться с этой ситуацией, сохранив при этом безопасность типов с помощью mypy? Должен ли я:
- Подавить ошибку проверки типов с помощью # type: ignore?
- Провести рефакторинг моего код для использования типа Union[str, datetime] для значений словаря, несмотря на ошибку strptime?
- Используйте альтернативный подход, о котором я, возможно, не знаю ?
Что я пробовал:
[*]< strong>Подавлена ошибка:
Я использовал # type: ignore, чтобы временно обойти проблему:
Код: Выделить всё
token_dict["expiryTime"] = expiry_time_dt # type: ignore
[*] Использование Union[str, datetime]:
Я обновил подсказку типа словаря:
Код: Выделить всё
token_dict: dict[str, Union[str, datetime]] = {"expiryTime": "2025-01-23T12:34:56"}
Код: Выделить всё
error: Argument 1 to "strptime" of "datetime" has incompatible type "Union[str, datetime]"; expected "str" [arg-type]
преобразование в str < /code> для насмешки: < /strong>
При издевании запросов, которые взаимодействуют с этим словарем, я должен убедиться, что значение сериализуется обратно на строку (Поскольку DateTime не является json-serializable). Это обратное преобразование неизбежно, и мне нужно обеспечить правильность типа в моем коде. < /P>
< /li>
< /ol>
< Br /> Контекст проблемы (для справки): < /h3>
Ключ "exrytime" < /code> является частью словаря токенов, который представляет метаданные для аутентификации. При насмешливых запросах я сериализую словарь, используя JSON, который не поддерживает объекты DateTime . Это требует преобразования значений DateTime обратно в строки перед сериализацией. Конверсии на заднем плане в сочетании с аннотациями типа сделали эту проблему сложной задачей.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ionary-val