"непоследовательное использование вкладок и пробелов в отступе"
Я пытаюсь создать приложение в Python 3.2, и я все время использую вкладки для отступов, но даже редактор меняет некоторые из них на пробелы, а затем печатает "непоследовательное использование вкладок и пробелов в отступе", когда я пытаюсь запустить программа.
Как изменить пробелы на вкладки? Это сводит меня с ума. (Я новичок в программировании). Я был бы рад, если бы мог получить некоторые общие советы по моему коду, если бы я совершил много ошибок, я был бы рад услышать.
import random
attraktioner = ["frittfall","bergodalbana","spökhuset"]
class Nojesfalt:
def __init__(self, attraktion):
self.val = attraktion
self.langd = 0
self.alder = 0
#längdgräns för fritt fall
def langdgrans(self):
print("")
self.langd = int(input("Hur lång är du i cm? "))
if self.langd < 140:
print("tyvärr, du är för kort, prova något annat")
return 0
elif self.langd >= 140:
print("håll dig hatten, nu åker vi!")
print(" ")
return 1
#åldersgräns för spökhuset
def aldersgrans(self):
print("")
self.alder = int(input("Hur gammal är du? "))
if self.alder < 10:
print("tyvärr, du är för ung, prova något annat")
return 0
elif self.alder >= 10:
print("Gå in om du törs!")
print(" ")
return 1
#åker attraktion frittfall lr bergodalbana
def aka(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("åkturen gick åt skogen, bättre lycka nästa gång")
elif tal >= 20:
print("jabbadabbbadoooooooo")
return 1
#går i spökhuset
def aka1(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("du är omringad av spöken och kan inte fortsätta") return 0
elif tal >= 20:
print("Buhuuuuuu, buuuhuuuu")
return 1
#programkod
print("Välkommen till nöjesfältet, vad vill du göra?")
print(" ")
while 1:
vald_attr = input("Vad vill du göra?\n1. frittfall\n2. bergodalbana\n3. spökhuset\n4. Avsluta\n")
if vald_attr == "1":
val = Nojesfalt(attraktioner[0])
if val.langdgrans() == 1:
val.aka()
elif vald_attr == "2":
val = Nojesfalt(attraktioner[1])
val.aka()
elif vald_attr == "3":
val = Nojesfalt(attraktioner[2])
if val.aldersgrans() == 1:
val.aka1()
elif vald_attr == "4":
break
Ответы
Ответ 1
Не используйте вкладки.
- Задайте в редакторе 4 пробелы для отступов.
- Сделайте поиск и замените, чтобы заменить все вкладки на 4 пробела.
- Убедитесь, что ваш редактор установлен на отображать вкладки в виде 8 пробелов.
Примечание. Причина 8 пробелов для вкладок заключается в том, что вы сразу заметите, когда вкладки были вставлены непреднамеренно - например, при копировании и вставке из кода примера, который использует вкладки вместо пробелов.
Ответ 2
С редактором IDLE вы можете использовать это:
- Меню Правка → Выбрать все
- Формат меню → Untabify Region
- Предполагая, что ваш редактор заменил 8 пробелов на вкладке, введите 8 в поле ввода.
- Нажмите select, и он исправит весь документ.
Ответ 3
Использование команды autopep8
ниже исправило это для меня:
autopep8 -i my_file.py
Документация для autopep8
здесь.
Ответ 4
Как правило, люди предпочитают отступы с пространством. Это более согласовано между редакторами, что приводит к меньшему количеству несоответствий такого рода. Тем не менее, вам разрешено отступать с вкладкой. Это ваш выбор; однако вы должны знать, что стандарт из 8 пробелов на вкладку немного широк.
Что касается вашей проблемы, скорее всего, ваш редактор перепутался. Конвертировать вкладку в пространство на самом деле зависит от редактора.
Например, в Emacs вы можете вызвать метод "untabify".
В командной строке вы можете использовать линию sed (адаптировать количество пробелов к тому, что вас радует):
sed -e 's;\t; ;' < yourFile.py > yourNedFile.py
Ответ 5
Если вы используете Sublime Text для разработки Python, вы можете избежать ошибки, используя пакет Anaconda. После установки Anaconda откройте файл в Sublime Text, щелкните правой кнопкой мыши на открытых пространствах → выберите Anaconda → нажмите на autoformat. Готово. Или нажмите Ctrl + Alt + R.
Ответ 6
Недавно у меня была такая же проблема и выяснилось, что мне просто нужно преобразовать кодировку.py файла в UTF-8, как это использует набор Python 3.
Кстати, я все время использовал 4-пробельные вкладки, поэтому проблема не была вызвана ими.
Ответ 7
Что я сделал, когда появилась одна и та же ошибка: выберите все (Str + A) и нажмите Shift + Tab. Так что больше ничего не было. Теперь вернитесь к строкам, которые вы хотите отступом, и верните их, как вы этого хотите.
Это сработало для меня...
Ответ 8
Восхитительный текст 3
В Sublime Text, при редактировании файла Python:
Меню Sublime Text > Настройки > Настройки - Синтаксис:
Python.sublime-настройка
{
"tab_size": 4,
"translate_tabs_to_spaces": true
}
Ответ 9
Эту проблему можно решить с помощью notepad++
, заменив Tab на 4 Space:
- Выберите Поиск → Найти... или нажмите Ctrl + F
- Выберите вкладку "Заменить"
- В поле "Режим поиска" выберите "Расширенный" (\n,\r,\t,\0,\x...)
- .В поле Найти что: напишите \t
- В поле Заменить на: нажмите Space 4 раза. Убедитесь, что в этом поле больше ничего нет.
- Нажмите на кнопку Заменить все
![How to replace Tabs with Spaces]()
Ответ 10
У меня была эта проблема. Решение: ваша вкладка перед проблемой представляет собой пробелы, 4, 6 или 8 пробелов. Вы должны удалить их и вставить TAB. '\ Т'. Все это.
Ответ 11
Я использую Notepad++ и получил эту ошибку.
В Notepad++ вы увидите, что и вкладка, и четыре пространства одинаковы, но когда вы скопируете код в Python IDLE, вы увидите разницу, а строка с вкладкой будет иметь больше места перед ней, чем остальные.
Чтобы решить проблему, я просто удалил вкладку перед строкой и добавил четыре пробела.
Ответ 12
Ваша проблема связана с ограничениями/конфигурацией вашего редактора. Некоторые редакторы предоставляют вам инструменты для решения этой проблемы:
-
Преобразование вкладок в пробелы
Например, если вы используете редактор Stani Python, вы можете настроить его для сохранения.
-
Преобразование пробелов в вкладки
Если вы используете ActiveState Komodo, у вас есть инструмент для "табулизации" вашего кода. Как уже указывали другие, это не очень хорошая идея.
Eclipse Pydev предоставляет функции "Конвертировать вкладки в пробелы" и "Преобразовать пробелы в закладки".
Ответ 13
У меня была такая же ошибка. Мне пришлось добавить несколько строк кода в существующий файл *.py. В Notepad++ это не сработало.
После добавления строк кода и сохранения я получил ту же ошибку. Когда я открыл тот же файл в PyCharm и добавил строки, ошибка исчезла.
Ответ 14
Я получил те же ошибки, но не мог понять, что я делаю неправильно.
Поэтому я исправил его, выполнив автоматический код в моем коде и разрешив машине исправить мою ошибку.
Если кто-то задается вопросом, как я это сделал. Просто. Идите в vim. Введите G = gg.
Это автоматически исправит все. Удачи :)
Ответ 15
Иногда tab
делает беспорядок во время отступов. Один из способов - явно использовать tab
и backspace
для правильного отступа кода.
Другой способ - использовать space
4 раза (в зависимости от того, сколько вы хотите отступать).
Странный способ, который работал для меня, когда ничего не работало, в зависимости от того, какая строка я получаю ошибку, я backspaced
эту строку до предыдущей строки, а затем нажал клавишу enter
. Он автоматически отступал от линии для правильной позиции, и после этого я не получал никаких ошибок.
Надеюсь, это поможет.
Ответ 16
У меня была такая же проблема и исправить ее, используя следующий скрипт python. надеюсь, что это поможет другим.
это связано с использованием вкладок и пробелов для отступающего кода. в этом скрипте я заменяю каждую вкладку четырьмя пробелами.
input_file = "source code path here" # e.g. source.py
output_file = "out put file path here" # e.g out.py
with open(input_file, 'r') as source:
with open(output_file, 'a+') as result:
for line in source:
line = line.replace('\t', ' ')
result.write(line)
если вы используете возвышенный или любой другой редактор, который дает вам инструмент для замены текста, вы можете заменить все вкладки четырьмя пробелами из редактора.
Ответ 17
Еще одна причина, я не люблю Python...
Если бы эта же проблема (хотя я последовательно использовал вкладки, задал, чтобы моя IDE читала 4 пробела в качестве вкладок, и в представлении отображаются все отступы с кодом правильно и выровнены).
К счастью, это была только одна строка, которая занесла ошибку, но как только я удалил вкладки и ввел эквивалентное количество пробелов - проблема была исправлена.
Ответ 18
Если ваш редактор не распознает вкладки при выполнении поиска и замены (например, SciTE), вы можете вставить код в Word и выполнить поиск, используя Ctr-H и ^ t, которые находят вкладки, которые затем можно заменить на 4 пробела.
Ответ 19
Отсюда был дубликат этого вопроса, но я подумал, что могу предложить представление о современных редакторах и огромном количестве функций, которые они предлагают. В коде Python все, что нужно поместить в файл .py
, должно быть либо целиком, используя клавишу табуляции, либо пробелами. Соглашение состоит в том, чтобы использовать четыре пробела для отступа. Большинство редакторов имеют возможность визуально показывать в редакторе, имеет ли код отступы от пробелов или табуляции, что очень помогает при отладке. Например, с атомом, перейдя в настройки, а затем редактор, вы можете увидеть следующие две опции:
![atom editor to show tabs and spaces]()
Тогда, если ваш код использует пробелы, вы увидите маленькие точки, где ваш код имеет отступ:
![enter image description here]()
И если отступ с помощью вкладок, вы увидите что-то вроде этого:
![enter image description here]()
Теперь, если вы заметили, вы можете видеть, что при использовании вкладок слева появляется больше ошибок/предупреждений, это происходит из-за того, что называется pep8, документация pep8, которая в основном представляет собой единое руководство по стилю для python, так что все разработчики в основном пишут код тот же стандарт и внешний вид, который помогает при попытке понять код других людей, это в pep8, который предпочитает использовать пробелы для отступа, а не табуляции. И мы видим, что редактор показывает, что есть предупреждение, касающееся кода предупреждения W191
,
Я надеюсь, что все вышеперечисленное поможет вам понять природу проблемы, с которой вы столкнулись, и как ее предотвратить в будущем.
Ответ 20
Используйте, Idle для python или Idle3 для python3.
Ответ 21
Ваш код должен быть последовательным. Либо используйте пробелы целиком (рекомендуется 4 пробела), либо используйте табуляции целиком. Это не имеет ничего общего с IDE или текстовыми редакторами.
Ответ 22
Решение этой проблемы с помощью редактора Vim
- Открытый терминал (Ctrl + Alt + T).
- Перейдите в каталог, где находится файл (
cd <path_to_your_directory>
). Пример: cd /home/vineeshvs/work
.
- Откройте файл в Vim (
vim <file_name>
). Пример: vim myfile.txt
.
- [Необязательный шаг] Включить подсветку ключевых слов поиска в Vim (ESC
:set hlsearch
)
- Перейдите на линию, где у вас есть эта проблема (ESC
:<line_number>
). Пример: :53
в редакторе Vim после однократного нажатия кнопки ESC.
- Замените табуляцию, используя необходимое количество пробелов в Vim (
:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc
). Пример: Tab будет заменен на четыре пробела следующей командой: :.,$s/\t/ /gc
после однократного нажатия кнопки ESC). Этот процесс является интерактивным. Вы можете дать y
заменить вкладку пробелами и n
пропустить конкретную замену. Нажмите ESC, когда закончите с необходимыми заменами.
Ответ 23
Для меня я работаю с возвышенным текстом, поэтому я получил такую ошибку, где отступы были неправильными, поэтому я выбрал эту строку кода и сделал следующее на возвышенном тексте
view--> отступ → преобразовать отступ в пробелы
Тогда ошибка была исправлена
Ответ 24
Выделите биты с отступом и нажмите вкладки. Затем они станут последовательными:)