2014-08-29 37 views
0

我已经写了下面的类定义的文本崇高的Python缩进错误蟒蛇在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 

但对于saveSettings功能行开始在同一缩进级别前一功能,所以我想不通为什么我得到这个错误。

+0

你尝试4个缩进,而不是两个? – 2014-08-29 21:40:16

+0

适合我。请检查以确保选项卡不会以某种方式隐藏到您的文件中。 (你可以使用'tabnanny'来检查,或者打开Sublime中的不可见字符)。 – nneonneo 2014-08-29 21:59:04

回答

2

这很可能是您的文件中的选项卡和空格之间不一致的混合。现在,制表符通常被认为是4个空格,但实际上有一个制表符在插入Tab键时被插入。

但是,因为使用4个空格作为缩进而不是制表符已经开始成为标准的东西,所以许多文本编辑器将默认使用4个空格作为自动缩进的方法,这就是混合制表符的结果字符(你点击tab键的那些)和4个空格(编辑器为你放置的那些)。 Python真的不喜欢那样,并会出错。虽然空间正在成为标准,但您需要选择一个并保持一致。

在崇高(我假设崇高2)时,您可以转换您的前导制表符/空格,并将其设置为在您按Tab键时自动将制表符扩展为4个空格。这是在崇高文档这里概述:

https://www.sublimetext.com/docs/2/indentation.html

+0

在Sublime中,我的选项卡设置为: “tab_size”:2, “translate_tabs_to_spaces”:true – Ward9250 2014-08-29 23:01:24

+0

它似乎讨厌类的函数引用之间的空行。 – Ward9250 2014-08-29 23:08:57

+0

只要没有空格,即在空行上没有缩进,Python应该可以在函数引用之间留空行。如果你有一个制表符或空格,那么它将会出错。 Python真的是这样的人。 – Schiem 2014-09-02 23:30:38