我有一些代码已经从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
等)。
但是代码格式化程序也可以帮忙。
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.
如果我做对了,然后加上括号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.