Когда вы используете переменную в первый раз, mypy по существу выведет ее тип на основе самого первого присваивания, которое она видит.
Таким образом, в этом случае строка c = int(_info.group(1))
появляется первой, поэтому mypy решаетчто тип должен быть int
.Затем он жалуется, когда видит c = None
.
. Один из способов обойти это ограничение - просто объявить переменную с ожидаемым типом.Если вы используете Python 3.6+ и можете использовать переменные аннотации, вы можете сделать это следующим образом:
c: Optional[int]
if c_info:
c = int(c_info.group(1))
else:
c = None
Или, возможно, более кратко, например:
c: Optional[int] = None
if c_info:
c = int(c_info.group(1))
Если вам нужноПоддерживая более старые версии Python, вы можете аннотировать тип, используя синтаксис на основе комментариев, например:
c = None # type: Optional[int]
if c_info:
c = int(c_info.group(1))
Предложение rje сделать:
if c_info:
c = int(c_info.group(1))
return a, b, c
else:
return a, b, None
... такжеразумный.