Python 2.7 python类中的python缩进错误

Python 2.7 python类中的python缩进错误,python-2.7,indentation,Python 2.7,Indentation,我一直在为python编写下面的类定义 class BPHmanager(object): """Class for BPHmanager""" def makeNewProject(self, projname): if os.path.exists(projname): print "Directory of that name already exists in current directory." sys.exit(2) # exit the

我一直在为python编写下面的类定义

class BPHmanager(object):
  """Class for BPHmanager"""

  def makeNewProject(self, projname):
    if os.path.exists(projname):
      print "Directory of that name already exists in current directory."
      sys.exit(2) # exit the program.
    else:
      os.mkdir(projname)
      os.chdir(projname)
      os.mkdir(".bph")
      os.mkdir(".bph/deletes")
      defaults = raw_input("Add default datatypes to project? Yy/Nn > ")
      if defaults == 'Y' or defaults == 'y':
        self.Datatypes = {"reads": [], "assemblies": [], "alignments":[], "annotations":[]}
        self.MetadataDefs["reads"] = []
        self.MetadataDefs["assemblies"] = []
        self.MetadataDefs["alignments"] = []
        self.MetadataDefs["annotations"] = []

  def saveSettings(self):
    settingsfile = open(".bph/bph.settingsfile", 'w')
    settingsdict = {self.Organisms, self.Datatypes, self.MetadataDefs}
    settingsfile.write(json.dumps(settingsdict, separators=(',',':')))
    settingsfile.close()
    print "Saved changes to .bph/bph.settingsfile"

  def __init__(self, argv):
    # and so on
出于某种原因,如果我导入此文件以测试它或复制并粘贴到解释器中,我总是会遇到许多缩进错误,首先是:

def saveSettings(self):
  File "<stdin>", line 1
    def saveSettings(self):
    ^
IndentationError: unexpected indent
def保存设置(自):
文件“”,第1行
def保存设置(自身):
^
缩进错误:意外缩进

但是
saveSettings
函数的行开始于与前一个函数相同的缩进级别,因此我无法理解为什么会出现此错误。

很可能是文件中的制表符和空格混合不一致。现在,制表符通常被认为是4个空格,但实际上有一个制表符字符,当你点击制表键时会被插入

但是,由于使用4个空格代替制表符进行缩进已经开始成为一种标准,许多文本编辑器默认使用4个空格作为自动缩进的方法,这将导致制表符字符(您点击制表键的字符)和4个空格(编辑器为您输入的字符)的混合。Python真的不喜欢这样,而且会出错。虽然空间正在成为一种标准,但您需要选择一个并保持一致

在升华中(我假设升华2),您可以转换前导制表符/空格,还可以将其设置为在按下制表键时自动将制表符扩展到4个空格。这里的Sublime文档对此进行了概述:


你试过四个缩进而不是两个吗?对我来说很有用。请检查以确保选项卡没有以某种方式潜入您的文件。(您可以使用
tabnanny
之类的工具进行检查,或者只在Sublime中打开不可见字符)。在Sublime中,我对选项卡的设置是:“tab_大小”:2,“translate_tabs_to_spaces”:True它似乎讨厌类的函数引用之间的空行。Python应该可以在函数引用之间使用空行,只要没有空白,即空白行上没有缩进。如果有制表符或空格,则会出错。Python真的像那样挑剔。