У меня есть код, который я портировал с 2,7 до 3,6 / 3,7.Большинство модульных тестов, которые имеют довольно хороший охват, уже успешно выполняются под 3.x.Но мне еще предстоит полностью перейти на 3.x для разработки.
Я недавно заметил, что при запуске black - средство форматирования кода , что он задыхается, если мой код не будет компилироваться под3.x, с сообщением о сбое анализа на основе AST 3.6.
Является ли black надежным индикатором готовности 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.