2014-08-29 79 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