IDLE (Python 2.7.5) больше не открывает файлы .py.

После обновления с Ubuntu 13.04 до 13.10 IDLE 2.7.5 зависает всякий раз, когда я пытаюсь открыть файл .py. Откроется пустое окно редактора с заголовком «idle». Этот редактор можно использовать для создания новых файлов, но он никогда не отображает содержимое файла, который я пытался открыть, и не закроется никакими способами, которые я пробовал. У меня также есть IDLE (с 3.3.2) в моей системе, и он все еще работает нормально. Что-то пошло не так во время моей первой попытки обновить Ubuntu 13.04 до 13.10, поэтому я подумал, что это могло быть частью проблемы, но новая установка ОС не решила проблему.


person Kevin    schedule 26.11.2013    source источник
comment
Может пора посмотреть на другие редакторы. IDLE — это хорошо, но как только вы потратите некоторое время на что-то лучшее, вам не захочется возвращаться.   -  person John La Rooy    schedule 26.11.2013
comment
Что произойдет, если вы откроете idle из командной строки? $ простоя какой-то файл.py ?? Есть ли сообщения об ошибках?   -  person John La Rooy    schedule 26.11.2013
comment
NameError: глобальное имя «lst» не определено, а самая последняя трассировка: Файл /usr/lib/python2.7/idlelib/IOBinding.py, строка 129, в coding_spec для строки в lst:   -  person Kevin    schedule 01.12.2013
comment
Да, наверное, ты прав. Я думаю, пришло время перейти к большим и лучшим вещам. Есть рекомендации из личного опыта?   -  person Kevin    schedule 01.12.2013


Ответы (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'.

person Thaago    schedule 03.12.2013
comment
С Python 2.7.5+ это больше не проблема. Похоже, они взяли ваше решение, но применили его немного поспешно. Таким образом, переданная переменная — это str, а str = str.split(\n, 2)[:2] правильно, но следующая строка по-прежнему предназначена для строки в lst:, а не для строки в str: Вот где я получил ошибка и изменение lst на str в следующей строке устранило проблему. - person Sojurn; 22.01.2014

Репост моего комментария в Thaago, так как в ответе испортилось форматирование. Он тот, кто действительно решил эту проблему, и для контекста того, о чем я говорю, сначала прочитайте его комментарий.

С Python 2.7.5+ это больше не проблема. Похоже, они взяли ваше решение, но применили его немного поспешно. Чтобы переданная переменная была str, а

str = str.split("\n", 2)[:2]

правильно, но следующая строка по-прежнему

for line in lst:

скорее, чем

for line in str:

Вот где я получил ошибку, и изменение lst на str в следующей строке устранило проблему. Мне это кажется очень неаккуратным, и я надеюсь, что они исправят это.

Как самостоятельно найти источник новых ошибок

Между прочим, способ действительно увидеть, в чем проблема, состоит в том, чтобы начать «бездействовать» следующим образом: откройте тип терминала бездействия и нажмите Enter. Используйте бездействие в обычном режиме и делайте все, что вы делали, чтобы воспроизвести проблему. В моем случае было просто нажать «Файл» -> «Последние файлы» и открыть мой последний файл.

Когда он облажается, ошибка будет в терминале, который вы использовали для открытия в режиме ожидания.

person Sojurn    schedule 22.01.2014