2014-08-29 4 views
0

Я писал следующее определение класса в Sublime Text для питонаОтступа ошибки в питоне в классе питона

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

Пробовали ли вы четыре отступы, вместо двух? –

+0

Работает для меня. Пожалуйста, проверьте, чтобы вкладки не просочились в ваш файл. (Вы можете использовать что-то вроде 'tabnanny' для проверки или просто включать невидимые символы в Sublime). – nneonneo

ответ

2

Скорее всего, у вас есть несогласованное сочетание между вкладками и пробелами в файле. В настоящее время вкладки часто считаются четырьмя пробелами, но на самом деле есть символ табуляции, который вставляется при нажатии клавиши табуляции.

Однако, поскольку использование 4-х пространств для отступов вместо вкладок начало становиться чем-то стандартным, многие текстовые редакторы по умолчанию используют 4 пробела в качестве метода автоиндексации, что и приводит к смешению вкладки символы (те, которые вы нажимаете на клавишу вкладки), и 4 пробела (те, которые редактор вводит для вас). Python действительно не нравится, и будет ошибка. Хотя пробелы становятся стандартом, вам нужно выбрать один и быть последовательным.

В возвышенном (я предполагаю, что Sublime 2) вы можете конвертировать свои ведущие вкладки/пробелы, а также настроить автоматическое расширение вкладок до 4 пробелов, когда вы нажимаете клавишу табуляции. Это описано в Sublime документы здесь:

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

+0

В Sublime мои настройки для вкладок: «tab_size»: 2, «translate_tabs_to_spaces»: true – Ward9250

+0

Кажется, что ненавижу пустые строки между функциями refs класса. – Ward9250

+0

Python должен быть в порядке с пустой линией между функциями refs, если нет пробелов, т. Е. На пустой строке нет отступов. Если у вас есть символ табуляции или пробелы, это приведет к ошибке. На самом деле Python так проницателен. – Schiem

Смежные вопросы