当我粘贴脚本时,Python交互式解释器有空行问题

时间:2016-06-17 23:34:07

标签: python

我是一位经验丰富的程序员,开始使用Python。我已经编写了一个简单的Python脚本,我已将其放入名为add_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

如何解决此问题?我希望能够粘贴并尝试我在网站上找到的代码,其中许多代码都有空行。

2 个答案:

答案 0 :(得分:0)

exec与三引号原始字符串一起使用:

exec r'''
[paste code here]
'''

如果粘贴的代码使用三引号,尤其是文档字符串,则可能需要检查并正确使用"""'''

如果粘贴的代码使用两种类型的三重引用(罕见但可能),您可以解决这个问题:

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

答案 1 :(得分:0)

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

pip install ipython

然后输入ipython / ipython3

启动REPL口译员