flake8插件,用于检查对`sys.version`或`sys.version_info`的误用
项目描述
flake8-2020
flake8插件,用于检查对sys.version
或sys.version_info
的误用
当存在python3.10
或python4.0
时(预计在2020年左右),这将成为一个问题。
您可能还会发现python3.10的早期构建很有用
安装
pip install flake8-2020
flake8代码
代码 | 描述 |
---|---|
YTT101 | sys.version[:3] 被引用(python3.10) |
YTT102 | sys.version[2] 被引用(python3.10) |
YTT103 | sys.version 与字符串比较(python3.10) |
YTT201 | sys.version_info[0] == 3 被引用(python4) |
YTT202 | six.PY3 被引用(python4) |
YTT203 | sys.version_info[1] 与整数比较(python4) |
YTT204 | sys.version_info.minor 与整数比较(python4) |
YTT301 | sys.version[0] 被引用(python10) |
YTT302 | sys.version 与字符串比较(python10) |
YTT303 | sys.version[:1] 被引用(python10) |
理由
许多代码错误地引用了sys.version
和sys.version_info
成员。特别是,在Python 3.9之后的版本发布时,这可能会引起一些问题。我的当前建议是3.10,因为我相信它对代码的破坏较少,以下是一些会导致问题的模式
# in python3.10 this will report as '3.1' (should be '3.10')
python_version = sys.version[:3] # YTT101
# in python3.10 this will report as '1' (should be '10')
py_minor = sys.version[2]
# in python3.10 this will be False (which goes against developer intention)
sys.version >= '3.5' # YTT103
# correct way to do this
python_version = '{}.{}'.format(*sys.version_info)
py_minor = str(sys.version_info[1])
sys.version_info >= (3, 5)
# in python4 this will report as `False` (and suddenly run python2 code!)
is_py3 = sys.version_info[0] == 3 # YTT201
# in python4 this will report as `False` (six violates YTT201!)
if six.PY3: # YTT202
print('python3!')
if sys.version_info[0] >= 3 and sys.version_info[1] >= 5: # YTT203
print('py35+')
if sys.version_info.major >= 3 and sys.version_info.minor >= 6: # YTT204
print('py36+')
# correct way to do this
is_py3 = sys.version_info >= (3,)
if not six.PY2:
print('python3!')
if sys.version_info >= (3, 5):
print('py35+')
if sys.version_info >= (3, 6):
print('py36+')
# in python10 this will report as '1'
python_major_version = sys.version[0] # YTT301
# in python10 this will be False
if sys.version >= '3': # YTT302
print('python3!')
# in python10 this will be False
if sys.version[:1] >= '3': # YTT303
print('python3!')
# correct way to do this
python_major_version = str(sys.version_info[0])
if sys.version_info >= (3,):
print('python3!')
if sys.version_info >= (3,):
print('python3!')
作为pre-commit钩子
有关说明,请参阅pre-commit
示例.pre-commit-config.yaml
- repo: https://github.com/pycqa/flake8
rev: 3.7.8
hooks:
- id: flake8
additional_dependencies: [flake8-2020==1.6.1]
关闭
flake8_2020-1.8.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 094ea95e8b614c3bd123fd4f007be28ec117ca57a6169903d4baaabe78e3e590 |
|
MD5 | 2898bfc6977ff7b71cad5fed49bd531f |
|
BLAKE2b-256 | cf0be71a0d9efd854a631e2d51707676886997c73bec70c3c221b84601b976d2 |
关闭
flake8_2020-1.8.1-py2.py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 59b6b8ac01cde10ef11b31a2c9aa15b4509d828ae115ee5be34464b9e4de4ea6 |
|
MD5 | cf642810307c7e955b30a234a3061aaa |
|
BLAKE2b-256 | 36f014c6c25768ddc81999733e7bed89e9285b273920505180155e351ed92dc5 |