После обновления с Ubuntu 13.04 до 13.10 IDLE 2.7.5 зависает всякий раз, когда я пытаюсь открыть файл .py. Откроется пустое окно редактора с заголовком «idle». Этот редактор можно использовать для создания новых файлов, но он никогда не отображает содержимое файла, который я пытался открыть, и не закроется никакими способами, которые я пробовал. У меня также есть IDLE (с 3.3.2) в моей системе, и он все еще работает нормально. Что-то пошло не так во время моей первой попытки обновить Ubuntu 13.04 до 13.10, поэтому я подумал, что это могло быть частью проблемы, но новая установка ОС не решила проблему.
IDLE (Python 2.7.5) больше не открывает файлы .py.
Ответы (2)
В одном из файлов idlelib есть ошибка. Этот файл должен быть либо новым, либо неиспользованным в предыдущих версиях, потому что это просто проблема с именем.
Перейдите по адресу: /usr/lib/python2.7/idlelib/IOBinding.py
Если это недопустимый путь, запустите его из командной строки в режиме ожидания, попробуйте загрузить файл и посмотрите на трассировку стека, чтобы увидеть, где находится окончательная ошибка.
Перейдите к строке 122 и измените строки 122-128 на следующие:
def coding_spec(lst):
"""Return the encoding declaration according to PEP 263.
Raise LookupError if the encoding is declared but unknown.
"""
# Only consider the first two lines
lst = lst.split("\n", 2)[:2]
(Комментарии не нужны, но сохраните те комментарии, которые были). Вы заметите, что все, что вы делаете, это меняете имя переменной 'str' (которое зарезервировано и в любом случае не должно использоваться) на 'lst'.
Репост моего комментария в Thaago, так как в ответе испортилось форматирование. Он тот, кто действительно решил эту проблему, и для контекста того, о чем я говорю, сначала прочитайте его комментарий.
С Python 2.7.5+ это больше не проблема. Похоже, они взяли ваше решение, но применили его немного поспешно. Чтобы переданная переменная была str, а
str = str.split("\n", 2)[:2]
правильно, но следующая строка по-прежнему
for line in lst:
скорее, чем
for line in str:
Вот где я получил ошибку, и изменение lst на str в следующей строке устранило проблему. Мне это кажется очень неаккуратным, и я надеюсь, что они исправят это.
Как самостоятельно найти источник новых ошибок
Между прочим, способ действительно увидеть, в чем проблема, состоит в том, чтобы начать «бездействовать» следующим образом: откройте тип терминала бездействия и нажмите Enter. Используйте бездействие в обычном режиме и делайте все, что вы делали, чтобы воспроизвести проблему. В моем случае было просто нажать «Файл» -> «Последние файлы» и открыть мой последний файл.
Когда он облажается, ошибка будет в терминале, который вы использовали для открытия в режиме ожидания.