这段代码,test.py:
if 1:
print "foo"
print "bar"
可以使用execfile("test.py")
或python test.py
成功执行,但是当尝试将其复制粘贴到python解释器中时:
File "<stdin>", line 3
print "bar"
^
SyntaxError: invalid syntax
为什么会这样?可以通过配置解释器以便成功读取复制粘贴的文本吗?我想这可能会影响口译员的输入,但这对我来说没问题。
答案 0 :(得分:18)
我不知道标准命令提示符的任何技巧,但我可以建议你使用更高级的解释器,如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
答案 1 :(得分:17)
缩进可能会丢失或损坏。
查看IPython - 它是具有许多便捷功能的增强型python解释器。其中一个是魔术函数%paste
,允许您粘贴多行代码。
它还有tab-completion,auto-indentation等等。看看他们的网站。
在ipython中使用%paste
:
复制和粘贴内容是qt控制台中修复的内容之一,这里使用了新代码ipython qtconsole
中的代码块“只是工作”的简单复制粘贴:
答案 2 :(得分:7)
将%autoindent
设置为自动缩进OFF。之后你可以在IPython中通过你的代码。
答案 3 :(得分:6)
输入多线构造时需要延续线。 - Interactive mode,The Python Tutorial(v2)(v3)
所以你需要输入:
if 1:
print "foo"
print "bar"
我还没有找到一个合适的解释,为什么它与非交互式会话有所不同,唉。
答案 4 :(得分:1)
所有当前答案都建议您更改为IPython。对于仅限python的解决方案,您可以使用textwrap从行中删除前导空格。
e.g。
>>> code=""" x='your pasted code'
y='with common indentation'"""
>>> formatted=textwrap.dedent(code)
>>> exec(formatted)
答案 5 :(得分:1)
我最近针对类似问题发现了另一个解决方案:
$ python << EOF
if 1:
print "foo"
print "bar"
EOF
答案 6 :(得分:0)
如果您像我一样使用Notepad ++(要复制和粘贴),尝试按空格替换标签,请转到设置&gt;偏好设置&gt;语言并检查替换为空格。
我自己有这个问题已经很久了,我发现python.exe可以识别空格。
答案 7 :(得分:0)
如果粘贴的内容有任何空行,则解释器在遇到它们时会触发评估。如果空行后的任何行都有缩进,则将导致IndentationError
,因为任何先前的上下文都已关闭。
解决方案:
请注意,空格与制表符似乎无关紧要。