Скопировать-вставить в Python интерактивный интерпретатор и отступы
Этот фрагмент кода test.py:
if 1:
print "foo"
print "bar"
может быть успешно выполнен с помощью execfile("test.py")
или python test.py
, но когда вы пытаетесь скопировать его в интерпретатор python:
File "<stdin>", line 3
print "bar"
^
SyntaxError: invalid syntax
Почему так? Может ли интерпретатор сконфигурирован таким образом, чтобы он успешно читал текст, скопированный в скопированном виде? Я думаю, это может повлиять на ввод текста в интерпретаторе, но это нормально для меня.
Ответы
Ответ 1
Отступ, вероятно, потерян или сломан.
Посмотрите IPython - это улучшенный интерпретатор python со многими удобными функциями. Одна из них - волшебная функция %paste
, которая позволяет вставлять несколько строк кода.
В нем также есть вкладка-завершение, автоотчет.. и многое другое. Посмотрите на их сайт.
Использование %paste
в ipython:
![enter image description here]()
И копирование и вставка - одна из вещей, исправленных в консоли qt, здесь, используя обычную старую копию и вставку вашего кода, "просто работает" в новом ipython qtconsole
:
![enter image description here]()
Ответ 2
Я не знаю никакого трюка для стандартной командной строки, но я могу предложить вам более продвинутый интерпретатор, например IPython, который имеет специальный синтаксис для нескольких -лайн-паста:
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:for c in range(3):
: print c
:
:--
0
1
2
Другим вариантом является bpython интерпретатор, который имеет автоматический режим вставки (если вы набираете слишком быстро, чтобы быть человеком):
>>> for c in range(3):
... print c
...
0
1
2
>>>
<C-r> Rewind <C-s> Save <F8> Pastebin <F9> Pager <F2> Show Source
Ответ 3
Строки продолжения необходимы при вводе многострочной конструкции. - Интерактивный режим, Учебник Python (v2) (v3)
Итак, вам нужно ввести:
if 1:
print "foo"
print "bar"
Мне еще предстоит найти подходящее объяснение, почему это отличается от неинтерактивного сеанса, увы.
Ответ 4
Сделайте %autoindent
автоматическое отключение. после этого вы можете пропустить свой код в IPython.
Ответ 5
Все текущие ответы подсказывают, что вы переходите на IPython. Для решения только для python вы можете использовать textwrap для удаления ведущих пробелов из строк.
например.
>>> code=""" x='your pasted code'
y='with common indentation'"""
>>> formatted=textwrap.dedent(code)
>>> exec(formatted)
Ответ 6
Если вы похожи на меня и используете Notepad ++ (для копирования и вставки), попробуйте заменить вкладки пробелами, перейдя в настройки > настройки > язык и проверьте замену пробелами.
У меня была эта проблема сама по себе так долго, и я узнал, что python.exe распознает пробелы.