Например. У меня есть функция x, которая очень редко возвращает значение None, во всех остальных случаях она возвращает int.
def x(i: int) -> Union[int, None]:
if i == 0:
return
return i
def test(i: int):
a = x(i)
# typing issue: *= not supported for types int | None and int
a *= 25
x используется очень часто в кодовой базе, и большую часть времени i уже сто раз проверялось, что x(i) действительно вернет int, а не None .
Использование его как int сразу приводит к появлению предупреждений о вводе - например. вы не можете умножить возможное значение None.
Как лучше всего поступить в этом случае?
Идеи, которые я рассмотрел:
- Нет смысла проверять его на None, если a равно None: return, поскольку оно уже известно .
- a *= 25 # type: ignore сделает неизвестным типом.
- a = x(i) # type: int уберет предупреждение. Но создаст новое предупреждение «int | None не может быть присвоено int»
- a = cast(int, x(i)), еще особо не тестировал.
def x(i: int) -> int:
"""might also return `None`"""
if i == 0:
return # type: ignore
return i
Подробнее здесь: https://stackoverflow.com/questions/781 ... none-value