Python交互式解释器在粘贴脚本时遇到空行问题

Python交互式解释器在粘贴脚本时遇到空行问题,python,Python,我是一名经验丰富的程序员,正在开始使用Python。我编写了一个简单的Python脚本,并将其放入名为add\u function.py的文件中: def myadd(a, b): sum = a + b return sum result = myadd(10, 15) print result 现在,当我从Python交互式解释器中获取文件时,它工作正常: % python Python 2.7.5 (default, Sep 12 2013, 21:33:34) [

我是一名经验丰富的程序员,正在开始使用Python。我编写了一个简单的Python脚本,并将其放入名为
add\u function.py
的文件中:

def myadd(a, b):

    sum = a + b
    return sum

result = myadd(10, 15)
print result
现在,当我从Python交互式解释器中获取文件时,它工作正常:

% python
Python 2.7.5 (default, Sep 12 2013, 21:33:34) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> execfile("add_function.py")
25

但是,当复制脚本并将其直接粘贴到解释器时,似乎解释器无法解析空白行。我觉得这令人沮丧,因为其他脚本语言(例如R)不区分脚本中的空行和交互提示中的空行

>>> def myadd(a, b):
... 
  File "<stdin>", line 2

    ^
IndentationError: expected an indented block
>>>     sum = a + b
  File "<stdin>", line 1
    sum = a + b
    ^
IndentationError: unexpected indent
>>>     return sum
  File "<stdin>", line 1
    return sum
    ^
IndentationError: unexpected indent
>>> 
>>> result = myadd(10, 15)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'myadd' is not defined
>>> print result
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'result' is not defined
def myadd(a,b): ... 文件“”,第2行 ^ 缩进错误:应为缩进块 >>>总和=a+b 文件“”,第1行 总和=a+b ^ 缩进错误:意外缩进 >>>回报金额 文件“”,第1行 回报金额 ^ 缩进错误:意外缩进 >>> >>>结果=myadd(10,15) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 NameError:未定义名称“myadd” >>>打印结果 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 NameError:未定义名称“结果”
如何解决此问题?我希望能够粘贴并试用我在网站上找到的代码,其中许多代码都有空行。

使用带有三重引号的原始字符串的
exec

exec r'''
[paste code here]
'''
如果粘贴的代码使用三重引号,尤其是docstring,则可能需要检查并适当使用

如果粘贴的代码同时使用两种类型的三重引号(罕见但可能),您可以绕过:

def heredoc(end='EOF'):
    lines = []
    while True:
        line = raw_input()
        if line == end:
            break
        lines.append(line)
    return '\n'.join(lines) + '\n'
那你就可以了

>>> exec heredoc()
[paste code here]
EOF
其中,
EOF
是手动键入的。

Try-它的CLI有一个特定的粘贴模式:您只需在解释器中键入
%paste
,它就能更好地处理粘贴的缩进。只需使用以下命令即可获得ipython:

pip install ipython

然后通过键入
ipython
/
ipython3

来启动解释器,将网站上找到的随机代码粘贴到python中听起来不是一个好主意,尤其是整个代码块。此外,.python是一种重要的空白语言,python REPL也是如此。REPL不适合您尝试的使用方式使用它。只需将代码粘贴到一个文件中并从那里运行即可。@melpomene:当然我不会粘贴随机代码。