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.10" лексикографически меньше, чем "3.9". Это может привести к неожиданному поведению и трудноуловимым ошибкам.

Вместо этого используйте sys.version_info для получения текущих мажорной и минорной версий в виде кортежа, что позволяет корректно сравнивать с другими кортежами.

Пример ошибки

import sys

sys.version > "3.9"  # Эквивалентно False в Python 3.10.

Как правильно

import sys

sys.version_info > (3, 9)  # Эквивалентно True в Python 3.10.