flake8插件,用于检查“sys.version”或“sys.version”信息的误用`
flake8-2020的Python项目详细描述
薄片8-2020
检查sys.version
或sys.version_info
您可能还会发现早期构建的python3.10很有用
安装
pip install flake8-2020
flake8代码
Code | Description |
---|---|
YTT101 | ^{ |
YTT102 | ^{ |
YTT103 | ^{ |
YTT201 | ^{ |
YTT202 | ^{ |
YTT203 | ^{ |
YTT204 | ^{ |
YTT301 | ^{ |
YTT302 | ^{ |
YTT303 | ^{ |
基本原理
许多代码错误地引用了sys.version
和sys.version_info
。
成员。特别是,当python的版本
在Python3.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 thispython_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!)ifsix.PY3:# YTT202print('python3!')ifsys.version_info[0]>=3andsys.version_info[1]>=5:# YTT203print('py35+')ifsys.version_info.major>=3andsys.version_info.minor>=6:# YTT204print('py36+')# correct way to do thisis_py3=sys.version_info>=(3,)ifnotsix.PY2:print('python3!')ifsys.version_info>=(3,5):print('py35+')ifsys.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 Falseifsys.version>='3':# YTT302print('python3!')# in python10 this will be Falseifsys.version[:1]>='3':# YTT303print('python3!')# correct way to do thispython_major_version=str(sys.version_info[0])ifsys.version_info>=(3,):print('python3!')ifsys.version_info>=(3,):print('python3!')
作为预提交挂钩
有关说明,请参见pre-commit。
样本.pre-commit-config.yaml
:
-repo:https://gitlab.com/pycqa/flake8rev:3.7.8hooks:-id:flake8additional_dependencies:[flake8-2020==1.3.0]