Правила Ruff, связанные с flake8-2020 (YTT)

Правила Ruff, связанные с flake8-2020. Подробнее об этом плагине на его странице PyPI

Часть категории Правила проверок кода в Ruff.

Ruff sys-version-slice3 (YTT101)

sys-version-slice3 в Ruff проверяет использование sys.version[:3].

Почему это неправильно

Если текущая мажорная или минорная версия состоит из нескольких цифр, sys.version[:3] усечет номер версии (например, «3.10» превратится в «3.1»). Это, скорее всего, непреднамеренно и может привести к труднозаметным ошибкам, если строка версии используется для проверки …

Ruff sys-version2 (YTT102)

sys-version2 в Ruff проверяет использование sys.version[2].

Почему это неправильно

Если текущая мажорная или минорная версия состоит из нескольких цифр, sys.version[2] выбирает только первую цифру минорной версии (например, «3.10» превратится в «1»). Это, скорее всего, непреднамеренно и может привести к труднозаметным ошибкам, если версия используется для …

Ruff sys-version-cmp-str3 (YTT103)

sys-version-cmp-str3 в Ruff проверяет сравнения sys.version со строковыми литералами, которые ложны в Python 3.10 или позже.

Почему это неправильно

Сравнение sys.version со строковым литералом является ошибкой, так как сравнение производится лексикографически, а не семантически. Например, sys.version > "3.9" вернёт False в Python 3.10, поскольку "3 …

Ruff sys-version-info0-eq3 (YTT201)

sys-version-info0-eq3 в Ruff проверяет сравнения на равенство с мажорной версией, возвращаемой через sys.version_info[0] (например, sys.version_info[0] == 3).

Почему это неправильно

Использование sys.version_info[0] == 3 для проверки, что основная версия Python является 3 или больше, не учитывает возможное увеличение номера основной версии (например, до Python 4). Это …

Ruff six-py3 (YTT202)

six-py3 в Ruff проверяет использование six.PY3.

Почему это неправильно

six.PY3 будет возвращать False для Python 4 и выше. Это, скорее всего, непреднамеренно и может привести к тому, что код, предназначенный для работы с Python 2, будет выполняться на Python 4.

Вместо этого используйте not six.PY2 для проверки …

Ruff sys-version-info1-cmp-int (YTT203)

sys-version-info1-cmp-int в Ruff проверяет сравнения, которые тестируют sys.version_info[1] с числом.

Почему это неправильно

Сравнения, основанные только на минорном номере версии, могут привести к трудноуловимым ошибкам и нежелательным эффектам, если номер основной версии Python изменится (например, станет Python 4).

Вместо этого сравнивайте sys.version_info с кортежем, включающим и основную …

Ruff sys-version-info-minor-cmp-int (YTT204)

sys-version-info-minor-cmp-int в Ruff проверяет сравнения, которые тестируют sys.version_info.minor с числом.

Почему это неправильно

Сравнения, основанные только на минорном номере версии, могут привести к трудноуловимым ошибкам и нежелательным эффектам, если номер основной версии Python изменится (например, станет Python 4).

Вместо этого сравнивайте sys.version_info с кортежем, включающим и мажорную …

Ruff sys-version0 (YTT301)

sys-version0 в Ruff проверяет использование sys.version[0].

Почему это неправильно

Если текущая мажорная или минорная версия состоит из нескольких цифр, sys.version[0] выберет только первую цифру основной версии (например, «10.2» превратится в «1»). Это, скорее всего, непреднамеренно и может привести к трудноуловимым ошибкам, если строка версии используется …

Ruff sys-version-cmp-str10 (YTT302)

sys-version-cmp-str10 в Ruff проверяет сравнения, которые тестируют sys.version со строковыми литералами, что приведёт к неверным результатам, если номер основной версии будет увеличен до Python 10 или выше.

Почему это неправильно

Сравнение sys.version со строковым литералом может привести к ошибкам, так как сравнение производится лексикографически, а не семантически. Например …

Ruff sys-version-slice1 (YTT303)

sys-version-slice1 в Ruff проверяет использование sys.version[:1].

Почему это неправильно

Если номер основной версии состоит более чем из одной цифры, выражение sys.version[:1] выбирает только первую цифру основной версии (например, «10.0» превратится в «1»). Это, скорее всего, непреднамеренно и может привести к трудноуловимым ошибкам в будущих версиях …