黑色-我可以依靠它标记不良的3.x语法吗?

时间:2018-10-16 04:03:17

标签: python-2to3

我有一些代码已经从2.7移植到3.6 / 3.7。大多数单元测试具有相当好的覆盖范围,它们已经在3.x下成功执行。但是我还没有完全致力于切换到3.x进行开发。

我最近注意到,在运行black - the code formatter时,如果我的代码无法在3.x下编译会令人窒息,并显示一条消息,说明基于AST的解析失败3.6。

至少在语法级别上,黑色是3.x准备就绪的可靠指标吗?我知道2to3是可以使用的工具。而且我知道,例如,它不会捕获标准库中的差异(basestring消失,StringIO.StringIO变成io.StringIO等)。 但是代码格式化程序也可以帮忙。

非常基本的示例,对于3.x来说语法无效:

print "a", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21

给予:

error: cannot format test_black.py: 
cannot use --safe with this file; failed to parse source file with 
Python 3.6's builtin AST. 
Re-run with --fast or stop using deprecated Python 2 syntax. 
AST error message: Missing parentheses in call to 'print'. 
Did you mean print("a", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,  16, 17, 18,  19, 20, 21)? (<unknown>, line 1)
All done!   
1 file failed to reformat.

将语法固定为3.x,并且可以正常工作。

如果我做对了,然后加上括号print ("a", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21),那么一切都很好:

reformatted test_black.py
All done! ✨  ✨
1 file reformatted.

0 个答案:

没有答案