Модификация инициируется the unicode
fixer. Этот фиксаж будет интерпретировать содержимое каждой строки литералов, и пытается повторно избежать недопустимых последовательностей Unicode, и удалить U/U строки префикс: (? Ошибка)
def transform(self, node, results):
...
elif node.type == token.STRING:
# 1. Replace the invalid \u sequences.
val = node.value
if not self.unicode_literals and val[0] in '\'"' and '\\' in val:
val = r'\\'.join([
v.replace('\\u', r'\\u').replace('\\U', r'\\U')
for v in val.split(r'\\')
])
# 2. Strip the leading `u` in u"...."
if val[0] in 'uU':
val = val[1:]
# 3. If the whole string is the same, return the original node.
if val == node.value:
return node # <--------------
# 4. Otherwise, create a new node.
new = node.clone()
new.value = val
return new
По какой-то неизвестной причине, даже если исходный узел возвращается на шаге 3, lib2to3 все еще интерпретирует это как изменение дерева маркеров, поэтому он говорит «Файлы, которые необходимо изменить». Однако исходный код тот же, поэтому есть «Нет изменений в foo.py».
Если шаг 3 возвращает None вместо этого, он действительно скажет: «Нет файлов, которые необходимо изменить».
Поврежденные файлы будут просто перезаписаны исходным вводом. Так что ошибка безвредна.
«Что-то, о чем заботится фиксатор» ... что это значит? Я должен заботиться? – JETM
@JETM Чтобы уточнить, это значит, что файл был проверен, а не на то, что необходимы изменения –
И я подумал, что * * * сосал в пользовательском интерфейсе. ;) – JETM