检测与Python3不兼容的代码。
py3kwarn的Python项目详细描述
PY3KWARN检测到与Python3不兼容的代码。它提供了 flake8样式的警告消息。
另请参见:
- 有关警告消息的信息的lib2to3文档。
- What’s new in Python 3.0
欢迎拉取请求!
安装
支持python 2.6、2.7和3.3+
$ pip install py3kwarn
…或从git存储库安装:
$ pip install -e git+git://github.com/liamcurry/py3kwarn.git#egg=py3kwarn
与VIM一起使用
您可以使用py3kwarnwith syntastic。如果要将py3kwarn与 另一个语法检查器(如flake8),则必须将其添加到 VIM配置:
let g:syntastic_python_checkers=['flake8', 'py3kwarn']
从命令行使用
$ py3kwarn example.py example.py:2:1: PY3K (FixApply) apply(hello, args, kwargs) -> hello(*args, **kwargs) example.py:5:1: PY3K (FixBasestring) basestring -> str example.py:15:1: PY3K (FixDict) d.iteritems(); -> iter(d.items()); example.py:16:1: PY3K (FixDict) d.viewvalues(); -> d.values(); example.py:19:1: PY3K (FixExcept) try:import asdf;except E, T:pass; -> try:import asdf;except E as T:pass; example.py:25:1: PY3K (FixExec) exec code in ns1, ns2; -> exec(code, ns1, ns2); example.py:28:1: PY3K (FixExecfile) execfile('test.py') -> exec(compile(open('test.py').read(), 'test.py', 'exec')) example.py:31:1: PY3K (FixFilter) filter(lambda x: x, [1, 2, 3]) -> [x for x in [1, 2, 3] if x] example.py:36:1: PY3K (FixFuncattrs) test.func_name; -> test.__name__; example.py:37:1: PY3K (FixFuncattrs) test.func_closure; -> test.__closure__; example.py:38:1: PY3K (FixFuncattrs) test.func_dict; -> test.__dict__; example.py:44:1: PY3K (FixHasKey) d.has_key('foobar') -> 'foobar' in d example.py:56:1: PY3K (FixInput) input('FixInput') -> eval(input('FixInput')) example.py:66:1: PY3K (FixItertoolsImports) from itertools import imap -> example.py:67:1: PY3K (FixItertoolsImports) from itertools import ifilter; -> example.py:68:1: PY3K (FixItertoolsImports) from itertools import izip; -> example.py:69:1: PY3K (FixItertoolsImports) from itertools import ifilterfalse; -> from itertools import filterfalse; example.py:62:1: PY3K (FixLong) long; -> int; example.py:75:1: PY3K (FixLong) long -> int example.py:50:1: PY3K (FixImports) import StringIO -> import io example.py:51:1: PY3K (FixImports) import cStringIO; -> import io; example.py:52:1: PY3K (FixImports) import cPickle; -> import pickle; example.py:53:1: PY3K (FixImports) import __builtin__; -> import builtins; example.py:62:1: PY3K (FixIsinstance) isinstance(x, (int, int)) -> isinstance(x, int) example.py:63:1: PY3K (FixIsinstance) isinstance(x, (int, int)); -> isinstance(x, int); example.py:11:1: PY3K (FixCallable) callable('hello') -> isinstance('hello', collections.Callable) example.py:59:1: PY3K (FixIntern) intern(s) -> sys.intern(s)
自动修改代码
问题可以通过py3kwarn2to3:
解决$ py3kwarn2to3 --write example.py
测试
测试可以使用make test完成。PY3KWARN还支持tox。这个 支持在许多版本的python中快速测试更改。看看 tox.ini文件了解更多详细信息。
贡献
若要进行贡献,请将repo分叉并克隆到本地计算机。
创建虚拟环境并
pip install -r requirements_dev.txt
那就用你已经解决的问题做一个请求吧!
待办事项
- 更友好的信息。
- A flake8 extension。
- 忽略某些错误的标志
- 快点。与其他语法检查程序相比,现在它相当慢。 可能需要进行重大的重构。