#python
#python
Вопрос:
У меня Python ведет себя очень странно. Обновленный вопрос, чтобы избавиться от всего несвязанного кода:
Мой новый файл содержит только это содержимое:
renamingDict = {'ID':'lead_id','Статус':'status','Название лида':'title','Имя':'name','Дата создания':'created_at','Источник':'source','Рабочий телефон':'phones','Ответственный':'manager','Дата изменения':'changed_at','Комментарий':'lead_comment','Дата экскурсии, ожидаемая':'exc_date','Ссылка':'link','ID брони/заявки':'res_id','ID экскурсии':'lead_exc_id','ID организатора':'lead_org_id'}
это выдает ошибку:
SyntaxError: Non-UTF-8 code starting with 'xd0' in file .lead_analysis.py on line 10, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
но это НЕ выдаст ошибку, если я добавлю новый элемент в источник словаря. После ‘lead_comment’ я добавлю ‘UTM Source’:», и я бы:
renamingDict = {'ID':'lead_id','Статус':'status','Название лида':'title','Имя':'name','Дата создания':'created_at','Источник':'source','Рабочий телефон':'phones','Ответственный':'manager','Дата изменения':'changed_at','Комментарий':'lead_comment','UTM Source':'','Дата экскурсии, ожидаемая':'exc_date','Ссылка':'link','ID брони/заявки':'res_id','ID экскурсии':'lead_exc_id','ID организатора':'lead_org_id'}
Который отлично работает!
Я могу исправить все это, добавив
#!/usr/bin/python
# -*- coding: UTF-8 -*-
в начале моего кода, но самая странная часть заключается в том, что я сталкиваюсь с ошибкой после УДАЛЕНИЯ независимой части рабочего кода.
Как python может думать, что словарь из 17 элементов в порядке, но выдает ошибку «encoding», когда я удаляю один элемент из словаря, даже не продолжая. Он понял мой код с дополнительными символами, как он может не понимать его сейчас?
Проблема кажется настолько абсурдной, что я действительно хочу, чтобы кто-нибудь помог мне понять, как это работает, хотя у меня есть обходной путь с
#!/usr/bin/python
# -*- coding: UTF-8 -*-
Более того, моя «глючная» строка со словарем работает без ошибок, если я просто добавлю новую строку в список моего словаря
Комментарии:
1.
encoding
open
Я думаю, проблема заключается в добавлении параметра в функцию2. Пожалуйста, покажите точные первые 10 строк каждой версии кода — вы утверждаете, что там возникает ошибка, но вы не показали нам. Я бы заподозрил проблему с цитированием…
3. Вы только даете подсказки. Можете ли вы попытаться предоставить [mvce] рабочий исходный файл, а другой не работает при удалении какого-либо элемента.
4. OK here is MVCE: renamingDict = {‘ID’:’lead_id’,’Статус’:’status’,’Название лида’:’title’,’Имя’:’name’,’Дата создания’:’created_at’,’Источник’:’source’,’Рабочий телефон’:’phones’,’Ответственный’:’manager’,’Дата изменения’:’changed_at’,’Комментарий’:’lead_comment’,’Дата экскурсии, ожидаемая’:’exc_date’,’Ссылка’:’link’,’ID брони/заявки’:’res_id’,’ID экскурсии’:’lead_exc_id’,’ID организатора’:’lead_org_id’}
5. выше приведено ПОЛНОЕ СОДЕРЖИМОЕ нового файла, которое выдает ошибку. Ошибка не возникает, если мы добавим ‘UTM Source’:» после элемента [lead_comment]
Ответ №1:
Итак, вы сами нашли решение: укажите кодировку
Моя теория почему: UTF-8 использует 1 байт для одних символов и несколько для других. Таким образом, добавление нескольких символов, отличных от ascii, которые сами по себе не приводят к ошибке, может привести к тому, что анализатор не будет синхронизирован с количеством символов и, следовательно, вызовет ошибку позже.
Если вы хотите его протестировать, верните свой код обратно и случайным образом добавьте несколько русских символов, чтобы посмотреть, вдруг он снова начнет работать.
Комментарии:
1. @Алексей Уверен, что мой ответ (по крайней мере, отчасти) правильный, вы его пробовали?
2. Спасибо за ответ! К сожалению, я был сосредоточен на другом подходе (вы можете увидеть в комментариях к сообщению), и текущее состояние этой проблемы ДЛЯ МЕНЯ заключается в том, как запретить моей Windows использовать Python 2 при запуске «python myFile.py » в Скорлупе…