TG Telegram Group & Channel
Питонические атаки | United States America (US)
Create: Update:

Вышел релиз 🔤🔤🔤🔤==0.990.

Релиз получился объемный: там добавили базовую поддержку Python 3.11, рекурсивные типы, категории ошибок в вывод, и ещё на сдачу наложили разные ломающие изменения. Готовьтесь, при обновлении наверняка будут новые проблемы в коде, который раньше тайп-чекался без ошибок. Ниже выпишу самые важные, на мой взгляд, пункты, а за полным списком изменений идите в блог mypy.

Теперь по умолчанию отключены неявные Optional типы. Придётся либо явно указывать в тайп хинте, что переменная/аргумент может принимать None, либо переключать настройку, чтобы вернуть старое неявное поведение:

def foo(s: str = None) -> int: ...  # Error!
def foo(s: str | None = None) -> int: ... # OK

Также тайп-чекер теперь перестал игнорировать пустые функции/методы. Раньше они не проверялись, а теперь проверяются и вызывают ошибки:

# Error: Missing return statement (no error before 0.990)
def some_func(arg: str) -> int:
pass

Через forward reference'ы теперь можно определять рекурсивные типы. Для применения рекурсивных типов нужно обязательно явно указывать тип, потому что если не указать, то mypy выведет какой-то многоэтажный нерекурсивный тип. Вот как это выглядит:

NaiveJSON = str | list["NaiveJSON"] | dict[str, "NaiveJSON"]
test_data: NaiveJSON = {"foo": {"bar": "baz"}} # OK

Тайп чекер постепенно становится умнее и строже. Гаечки затягиваются — остаётся всё меньше неявного и игнорируемого. И это хорошо.

Вышел релиз 🔤🔤🔤🔤==0.990.

Релиз получился объемный: там добавили базовую поддержку Python 3.11, рекурсивные типы, категории ошибок в вывод, и ещё на сдачу наложили разные ломающие изменения. Готовьтесь, при обновлении наверняка будут новые проблемы в коде, который раньше тайп-чекался без ошибок. Ниже выпишу самые важные, на мой взгляд, пункты, а за полным списком изменений идите в блог mypy.

Теперь по умолчанию отключены неявные Optional типы. Придётся либо явно указывать в тайп хинте, что переменная/аргумент может принимать None, либо переключать настройку, чтобы вернуть старое неявное поведение:

def foo(s: str = None) -> int: ...  # Error!
def foo(s: str | None = None) -> int: ... # OK

Также тайп-чекер теперь перестал игнорировать пустые функции/методы. Раньше они не проверялись, а теперь проверяются и вызывают ошибки:

# Error: Missing return statement (no error before 0.990)
def some_func(arg: str) -> int:
pass

Через forward reference'ы теперь можно определять рекурсивные типы. Для применения рекурсивных типов нужно обязательно явно указывать тип, потому что если не указать, то mypy выведет какой-то многоэтажный нерекурсивный тип. Вот как это выглядит:

NaiveJSON = str | list["NaiveJSON"] | dict[str, "NaiveJSON"]
test_data: NaiveJSON = {"foo": {"bar": "baz"}} # OK

Тайп чекер постепенно становится умнее и строже. Гаечки затягиваются — остаётся всё меньше неявного и игнорируемого. И это хорошо.
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍3


>>Click here to continue<<

Питонические атаки




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)