Python交互式解释器在粘贴脚本时遇到空行问题
我是一名经验丰富的程序员,正在开始使用Python。我编写了一个简单的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) [
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:当然我不会粘贴随机代码。