Python Interactive Interpreter всегда возвращает «Неверный синтаксис» в Windows - PullRequest
7 голосов
/ 31 декабря 2010

Я столкнулся с чрезвычайно запутанной проблемой. Все, что я печатаю в интерпретаторе Python, возвращает «Неверный синтаксис». Смотрите примеры ниже. Я пытался дурачиться с кодовой страницей приглашения, из которого запускаю интерпретатор, но, похоже, это совсем не помогло.

Более того, я не смог найти эту странную ошибку в другом месте онлайн.

Любая помощь, которую кто-либо может оказать, будет прекрасной. Я уже пытался переустановить Python, но мне не повезло - проблема есть и в 3.13, и в 2.7.

Продолжительность: Python версия 3.1.3, Windows XP SP3.

Начало:

C:\Program Files\Python31>.\python
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.  
>>> 2+2
  File "<stdin>", line 1  
    2+2
       ^     
SyntaxError: invalid syntax

>>> x = "Oh, fiddlesticks."  
  File "<stdin>", line 1  
    x = "Oh, fiddlesticks."  
                           ^  
SyntaxError: invalid syntax

Ответы [ 5 ]

6 голосов
/ 09 февраля 2011

Существует известная проблема при интерактивном и небуферизованном запуске Python, исправление которого запланировано в 3.2 - и может быть перенесено в более старые версии, см. http://bugs.python.org/issue11098

Гадость в том, что можно использовать небуферизованный ввод-вывод, не осознавая этого. В моем случае (Python 2.5.4 (r254: 67916)) я некоторое время назад установил переменную среды так, чтобы Python всегда запускался без буферизации (в Windows это PYTHONUNBUFFERED = YES или что-то еще). пустая строка заменила YES) и потом забыла об этом. Удаление env.var. решил проблему для меня.

Так что стоит проверить эту переменную среды. Это не установлено по умолчанию.

4 голосов
/ 31 декабря 2010

Теперь, когда образец очищен, возникает проблема с завершением строки.

Это не решение, но что произойдет, если вы создадите файл t.py, содержащий этот код, запуститеэто, а затем набрать какой-нибудь текст?ключ к проблеме.

Вы также можете попробовать это в командной строке:

python -c "import sys; print(repr(sys.stdin.readline()))"

Это позволит вам набрать одну строку и отобразить сведения об этой одной строке.

0 голосов
/ 11 августа 2015

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

enter image description here

Я выясняю причину vim файла истории (или вы можете рассмотреть hexdump -C в случае, если vim не показывает скрытые символы):

enter image description here

Согласно http://www.w3.org/International/questions/qa-bidi-controls:

RLM и LRM

Два других невидимых, но не встраиваемых управляющих символа предоставляемые Unicode обычно не имеют соответствующей разметки и должен использоваться как в символьном, так и в экранированном виде. Обратите внимание, что они менее проблематично, потому что они используются отдельно, а не в парах для разграничения диапазоны текста, как и другие контрольные символы, которые мы обсуждали.

U+200E:   LEFT-TO-RIGHT MARK
U+200F:   RIGHT-TO-LEFT MARK

Причина в том, что я направляю копирование / вставку из онлайн-кода (хотя я знаю, что это опасно для безопасности), который содержит скрытые символы RLM и LRM.

0 голосов
/ 01 января 2011

Это беспокойство:

C:\Program Files\Python31>.\python

Никогда не рекомендуется запускать программное обеспечение с текущим каталогом, установленным в каталог установки программного обеспечения. Вы рискуете создать файлы, которые мешают работе программного обеспечения. Когда вы начинаете получать ошибки и странное поведение, последующие побои могут вывести ситуацию из-под контроля.

Это лучше:

C: \where_else_with_no_spaces> "c: \ program files \ python31 \ python"

Лучше всего хранить его в "программных файлах". Если я не запомню, предлагаемая папка установки будет C:\Python31, что хорошо, потому что вам не нужны кавычки, как при использовании «программных файлов». У AFAIK нет веских причин иметь программное обеспечение в «программных файлах».

Некоторая диагностика:

A. откройте окно командной строки.
Б. введите это: dir "c:\program files\python31"
C. скопируйте / вставьте результат из шага B в редактирование вашего вопроса, т.е. не помещайте его в комментарий.

Было бы полезно, если бы вы ответили (в редактировании вашего вопроса) на вопрос, который кто-то задавал о клавиатурных макросах ... также рассмотрите возможность чрезмерно умных клавиатур, наличия нескольких IME и отсутствия «правильного» один. Кроме того, это поведение происходит с любым программным обеспечением, кроме Python?

0 голосов
/ 31 декабря 2010

Однажды, как в 2002 году, мне удалось создать версию Python, которая не могла работать с окончанием строки Windows.Это даст синтаксические ошибки, подобные этой, указывающие на конец строки.Я считаю крайне маловероятным, что в данном случае это проблема, особенно если вы используете установку Windows.

У меня также были подобные проблемы, когда я случайно использовал неразрывные пробелы вместо просто пробелов, ноЯ не понимаю, как это произойдет из приглашения, и кроме вас в примере 2 + 2 не используются пробелы и кавычки, что также может быть проблемой.

Какие кодировки и настройки клавиатуры вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...