2013-01-30 4 views
3

В настоящее время я использую Komodo Edit в Windows 7, однако я столкнулся с этой проблемой на своем Mac с помощью TextWrangler. По какой-то причине я получаю какую-то пропущенную ошибку, которая представляет собой огромную проблему, когда я пишу на Python. Например, все, кажется, правильно вкладками, но Komodo в настоящее время дает мне «Неоднозначное пробельные» ошибкаПростые проблемы с python

//How it appears in my editor 
def SaveList(self, directory): 
    templist = [] 
    templistbox2 = [] 
    for n,i in enumerate(self.listbox2.get(0,END)): 
     templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i))) 
    for filename in sorted(os.listdir(directory)): 
     self.templist.insert(i, filename) 
     print filename #whitespace error here 

Учитывая, я испытал это с двумя различными редакторами на обоих окнах и Mac, я интересно, если есть некоторые настройки, о которых я не знаю, или если я что-то делаю неправильно.

+0

У вас есть вкладки в отступе? Возможно, настройка, которую вы хотите, - это преобразование вкладок в пространство. –

ответ

6

Когда я скопировать код в файл, test.py и запустить

cat -A test.py 

Я вижу

//How it appears in my editor$ 
def SaveList(self, directory):$ 
    templist = []$ 
    templistbox2 = []$ 
    for n,i in enumerate(self.listbox2.get(0,END)): $ 
     templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))$ 
    for filename in sorted(os.listdir(directory)):$ 
     self.templist.insert(i, filename)$ 
^I print filename #whitespace error here$ 

, который указывает, что существует вкладка (представлена ​​^I), а затем четыре пробела на последней строке.

Я не уверен, что такое эквивалентный инструмент для Windows, но Mac должен иметь команду cat -A. Он покажет вам, где находятся закладки и пробелы.


Существует программа под названием reindent.py, которая преобразует символы табуляции в пробелы для вас:

reindent.py test.py 

В Unix есть также unexpand команда, которая преобразует пробелы в символы табуляции.

Большинство программистов на Python используют пробелы, а не вкладки для отступов. Большая часть кода Python, который вы найдете в Интернете, будет использовать пробелы, а не вкладки.

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

Проще всего идти с потоком и принять соглашение о пространстве-в-отступ, так что вам не придется переформатировать код других людей.

Между прочим, принятие соглашения об ограничении пробелов не означает, что нужно нажать SPACE 4 раза для каждого уровня отступа. У вашего редактора должен быть параметр конфигурации, который делает нажатием TAB вставьте 4 пробела.

+1

+1 Очевидно, что впереди должны быть вкладки, смешанные с пробелами, но показывать OP, как их найти, - прекрасный бонус! – Veger

+0

Спасибо за помощь, я попробую. Изменить - это очень странно. Я удалил вкладку, где я получал ошибку, и нажал 4 раза, и она ушла. Таким образом, вкладка вызвала ошибку, но 4 пробела нет. Я в замешательстве, разве они не должны быть тем же самым интервалом? – user1104854

+0

@ user1104854: Они * смотрят * то же самое на редакторе, который форматирует одну TAB так же, как 4 пробела, но не все редакторы одинаковы. Python не предполагает никакого отношения между вкладками и пробелами, поэтому он не знает, что означает вкладка уровня 1 и 4 пробела. В Python это правило ** никогда ** смешать вкладки и пробелы для отступов. – unutbu

2

Это распространенная проблема в Python. Следующие советы могут вам помочь:

1) Никогда не смешивайте пространства и язычки. Для новых проектов используйте пробелы, а не вкладки. См. PEP8. Моя рекомендация - использовать 4 пробела.

2) Измените значения по умолчанию для длины вкладок в Komodo, чтобы легче находить миксы. Нажмите меню Edit > Preferences, затем в Editor settings:

  • Снимите отметку, Prefer Tab characters over spaces.
  • Используйте 4 для Number of spaces for indent
  • использовать другое значение (8, например) для width of each tab character

; 3) reindent.py сценария в C:\Python2x\Tools\Scripts\ может помочь вам новых отступов файлы правильно

-d (--dryrun) Dry run. Analyze, but don't make any changes to, files. 
-r (--recurse) Recurse. Search for all .py files in subdirectories too. 
-n (--nobackup) No backup. Does not make a ".bak" file before reindenting. 
-v (--verbose) Verbose. Print informative msgs; else no output. 
-h (--help)  Help.  Print this usage information and exit. 

Change Python (.py) files to use 4-space indents and no hard tab characters. 
Also trim excess spaces and tabs from ends of lines, and remove empty lines 
at the end of files. Also ensure the last line ends with a newline. 

Я надеюсь, это помогает

+0

Спасибо за советы – user1104854

1

Поскольку никто не упомянул об этом, есть простой способ сделать пробелы видимыми прямо внутри Сам Комодо. Вам не нужно использовать внешние инструменты.

Просто выберите View/View Whitespace из меню или воспользуйтесь сочетанием клавиш Ctrl + Shift + 8 в Windows. Повторите, чтобы выключить его.

Пока вы находитесь в меню «Вид», ознакомьтесь с некоторыми другими полезными функциями. Я считаю, что рекомендации по отступлению особенно полезны и оставляют их включенными все время. Иногда маркеры EOL также полезны.

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