"непоследовательное использование вкладок и пробелов в отступе"

Я пытаюсь создать приложение в 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:

  1. Выберите Поиск → Найти... или нажмите Ctrl + F
  2. Выберите вкладку "Заменить"
  3. В поле "Режим поиска" выберите "Расширенный" (\n,\r,\t,\0,\x...)
  4. .В поле Найти что: напишите \t
  5. В поле Заменить на: нажмите Space 4 раза. Убедитесь, что в этом поле больше ничего нет.
  6. Нажмите на кнопку Заменить все

How to replace Tabs with Spaces

Ответ 10

У меня была эта проблема. Решение: ваша вкладка перед проблемой представляет собой пробелы, 4, 6 или 8 пробелов. Вы должны удалить их и вставить TAB. '\ Т'. Все это.

Ответ 11

Я использую Notepad++ и получил эту ошибку.

В Notepad++ вы увидите, что и вкладка, и четыре пространства одинаковы, но когда вы скопируете код в Python IDLE, вы увидите разницу, а строка с вкладкой будет иметь больше места перед ней, чем остальные.

Чтобы решить проблему, я просто удалил вкладку перед строкой и добавил четыре пробела.

Ответ 12

Ваша проблема связана с ограничениями/конфигурацией вашего редактора. Некоторые редакторы предоставляют вам инструменты для решения этой проблемы:

  1. Преобразование вкладок в пробелы

    Например, если вы используете редактор Stani Python, вы можете настроить его для сохранения.

  2. Преобразование пробелов в вкладки

Если вы используете 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

  1. Открытый терминал (Ctrl + Alt + T).
  2. Перейдите в каталог, где находится файл (cd <path_to_your_directory>). Пример: cd /home/vineeshvs/work.
  3. Откройте файл в Vim (vim <file_name>). Пример: vim myfile.txt.
  4. [Необязательный шаг] Включить подсветку ключевых слов поиска в Vim (ESC :set hlsearch)
  5. Перейдите на линию, где у вас есть эта проблема (ESC :<line_number>). Пример: :53 в редакторе Vim после однократного нажатия кнопки ESC.
  6. Замените табуляцию, используя необходимое количество пробелов в 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

Выделите биты с отступом и нажмите вкладки. Затем они станут последовательными:)