pms*_*pms 15 python copy-paste indentation
这段代码,test.py:
if 1:
print "foo"
print "bar"
Run Code Online (Sandbox Code Playgroud)
可以使用execfile("test.py")或成功执行python test.py,但是当一个人尝试将其复制粘贴到python解释器中时:
File "<stdin>", line 3
print "bar"
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
为什么会这样?可以通过配置解释器以便成功读取复制粘贴的文本吗?我想这可能会影响口译员的输入,但这对我来说没问题.
rpl*_*lnt 18
缩进可能会丢失或损坏.
看看IPython - 它是增强的python解释器,具有许多方便的功能.其中一个是一个神奇的功能%paste,允许您粘贴多行代码.
它还有tab-completion,auto-indentation ..等等.看看他们的网站.
%paste在ipython中使用:

复制和粘贴的东西是qt控制台中修复的东西之一,这里使用了一个简单的旧代码块复制粘贴"刚刚工作"的新东西ipython qtconsole:

nau*_*ghi 18
我不知道标准命令提示符的任何技巧,但我可以建议你使用更高级的解释器,如IPython,它具有多行粘贴的特殊语法:
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:for c in range(3):
: print c
:
:--
0
1
2
Run Code Online (Sandbox Code Playgroud)
另一种选择是bpython解释器,它具有自动粘贴模式(如果你打字太快而不能成为人类):
>>> for c in range(3):
... print c
...
0
1
2
>>>
<C-r> Rewind <C-s> Save <F8> Pastebin <F9> Pager <F2> Show Source
Run Code Online (Sandbox Code Playgroud)
所以你需要输入:
if 1:
print "foo"
print "bar"
Run Code Online (Sandbox Code Playgroud)
我还没有找到一个合适的解释,为什么它与非交互式会话不同,唉.
当前所有答案都建议您更改为 IPython。对于仅限 Python 的解决方案,您可以使用textwrap删除行中的前导空格。
例如,
>>> code=""" x='your pasted code'
y='with common indentation'"""
>>> formatted=textwrap.dedent(code)
>>> exec(formatted)
Run Code Online (Sandbox Code Playgroud)