Python 2 к 3: говорит 2to3 "Я получил это" - PullRequest
0 голосов
/ 06 июля 2018

с помощью линтеров или coverage.py, вы можете сказать инструменту игнорировать определенные части вашего кода.

например, #pragma: no cover указывает покрытию не считать ветвь исключения отсутствующей:

    except (Exception,) as e:    #pragma: no cover
        if cpdb(): pdb.set_trace()
        raise

Теперь я знаю, что могу исключить определенные фиксаторы из 2to3. Например, чтобы избежать исправления импорта ниже, я могу использовать 2to3 test_import_stringio.py -x imports.

Но можно ли использовать аннотации / директивы кода для поддержания исправителя активным, кроме как в определенных местах? Например, этот бит кода уже настроен на работу для 2 и 3.

#this import should work fine in 2 AND 3.
try:
    from io import StringIO
except ImportError:
    #pragma-for-2to3:  skip
    from StringIO import StringIO

но 2to3 услужливо преобразует, потому что такой директивы / прагмы

А теперь это не сработает в 2:

#this tests should work fine in 2 and 3.
try:
    from io import StringIO
except ImportError:
    #pragma-for-2to3:  skip
    from io import StringIO

Причина, по которой я спрашиваю, заключается в том, что я хочу избежать подхода большого взрыва. Я намерен по частям проводить рефакторинг кода, начиная с юнит-тестов, для выполнения под 2 и 3.

Я предполагаю, что это невозможно, просто смотрю на мои варианты. Вероятно, в конечном итоге я буду запускать конвертер только при импорте с -f imports, проверять, что он в итоге делал, делать это вручную в коде, а затем исключать импорт из будущего рассмотрения с помощью -x imports.

...