このコード、ファイルtest.py、
_if 1:
print "foo"
print "bar"
_
execfile("test.py")
または_python test.py
_で正常に実行できますが、コピーしてPythonインタープリター:
_File "<stdin>", line 3
print "bar"
^
SyntaxError: invalid syntax
_
なぜそうなのですか?インタプリタは、コピーして貼り付けたテキストを正常に読み取るように構成できますか?
インタプリタの入力に影響するかもしれませんが、私にとっては問題ありません。
インデントが失われたか壊れている可能性があります。
IPython -拡張されたpythonインタープリターで多くの便利な機能を備えています。そのうちの1つは、複数を貼り付けることができる魔法の関数%paste
です。コード行。
また、タブ補完、自動インデントなどがあります。彼らのサイトを見てください。
Ipythonで%paste
を使用する:
そして、コピーアンドペーストはqtコンソールで修正されたものの1つです。ここでは、新しいipython qtconsole
でコードブロックの単純な古いコピーアンドペーストを「正しく機能」させています。
標準コマンドPromptのトリックはわかりませんが、複数行の貼り付け用の特別な構文を持つ IPython のようなより高度なインタープリターを提案できます。
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:for c in range(3):
: print c
:
:--
0
1
2
もう1つのオプションは、自動貼り付けモードを備えた bpython インタープリターです(入力が速すぎて人間になれない場合)。
>>> for c in range(3):
... print c
...
0
1
2
>>>
<C-r> Rewind <C-s> Save <F8> Pastebin <F9> Pager <F2> Show Source
行う %autoindent
自動インデントをオフにします。その後、IPythonでコードを貼り付けることができます。
複数行の構成を入力する場合は、継続行が必要です。 -- インタラクティブモード 、 Pythonチュートリアル (v2)( v )
したがって、次のように入力する必要があります。
if 1:
print "foo"
print "bar"
残念ながら、なぜそれが非対話型セッションと異なるのかについて、適切な説明をまだ見つけていません。
同様の問題について最近見つけたもう1つの解決策:
$ python << EOF
if 1:
print "foo"
print "bar"
EOF
現在の回答はすべて、IPythonに変更することを提案しています。 Pythonのみのソリューションの場合、 textwrap を使用して、行から先頭の空白を削除できます。
例えば、
>>> code=""" x='your pasted code'
y='with common indentation'"""
>>> formatted=textwrap.dedent(code)
>>> exec(formatted)
あなたが私のようで、 Notepad ++ (コピーアンドペースト)を使用している場合、タブをスペースに置き換えてみてくださいメニュー設定→設定→言語そしてスペースによる置換を確認します。
私は長い間この問題を抱えていましたが、python.exeがスペースを認識することがわかりました。