我正在尝试评估SublimeREPL中的一些Python命令,但每个新命令都会导致IndentationError。如果我一次发送一行代码,代码就可以工作。
这是一个例子的尝试......
class Array(object):
def __init__(self, length = 0, baseIndex = 0):
assert(length >= 0)
self._data = [0 for i in range(length)]
self._baseIndex = baseIndex
def __copy__(self):
result = Array(len(self._data))
for i, datum in enumerate(self._data):
result._data[i] = datum
result._baseIndex = self._baseIndex
return result
def __len__(self):
return len(self._data)
评估为......
IndentationError: unexpected indent
>>> class Array(object):
... def __init__(self, length = 0, baseIndex = 0):
... assert(length >= 0)
... self._data = [0 for i in range(length)]
... self._baseIndex = baseIndex
...
>>> def __copy__(self):
File "<stdin>", line 1
def __copy__(self):
^
IndentationError: unexpected indent
>>> result = Array(len(self._data))
File "<stdin>", line 1
result = Array(len(self._data))
^
IndentationError: unexpected indent
>>> for i, datum in enumerate(self._data):
File "<stdin>", line 1
for i, datum in enumerate(self._data):
^
IndentationError: unexpected indent
>>> result._data[i] = datum
File "<stdin>", line 1
result._data[i] = datum
^
IndentationError: unexpected indent
>>> result._baseIndex = self._baseIndex
File "<stdin>", line 1
result._baseIndex = self._baseIndex
^
IndentationError: unexpected indent
>>> return result
File "<stdin>", line 1
return result
^
IndentationError: unexpected indent
>>>
>>> def __len__(self):
File "<stdin>", line 1
def __len__(self):
^
IndentationError: unexpected indent
>>> return len(self._data)
File "<stdin>", line 1
return len(self._data)
^
IndentationError: unexpected indent
但是如果我在每一行之前添加一些行注释字符,除了尾随“...... ......”之外它工作正常
class Array(object):
def __init__(self, length = 0, baseIndex = 0):
assert(length >= 0)
self._data = [0 for i in range(length)]
self._baseIndex = baseIndex
#
def __copy__(self):
result = Array(len(self._data))
for i, datum in enumerate(self._data):
result._data[i] = datum
result._baseIndex = self._baseIndex
return result
#
def __len__(self):
return len(self._data)
#
发送完毕后,我必须切换到REPL窗口,然后点击“...... ......”一行进入,以便进行评估。
>>> class Array(object):
def __init__(self, length = 0, baseIndex = 0):
assert(length >= 0)
self._data = [0 for i in range(length)]
self._baseIndex = baseIndex
#
def __copy__(self):
result = Array(len(self._data))
for i, datum in enumerate(self._data):
result._data[i] = datum
result._baseIndex = self._baseIndex
return result
#
def __len__(self):
return len(self._data)
#
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
我是Python的新手,所以如果我遗漏了一些非常简单的话,我会道歉。我试着到处寻找这个答案。
答案 0 :(得分:0)
我怀疑您已向我们展示的代码与您实际运行的代码不完全相同。在你的实际python脚本中,你可能有一些换行符将你的def彼此分开(这很好),但它们不在这里的代码粘贴部分。也许是因为这里的格式问题或其他原因。
但是,在Python中,空行表示您已完成上一部分。这仅在使用交互式解释器时很重要(如SublimeREPL)。空间和缩进很重要。在这种情况下,它只是将您的文本传输到解释器,如果您自己剪切并粘贴它就会发生同样的事情。它在def __copy__(self)
之前看到换行符,并假设它应该评估该类定义。然后,它会看到def __copy__(self)
,并注意到它有一些空格缩进。这导致IndentationError
您正在接收。
在SublimeREPL的github帐户中对此already existing bug进行评论,或者在代码中不使用空行。