Как исправить taberror inconsistent use of tabs and spaces in indentation

Яндекс Переводчик переводит “TabError: inconsistent use of tabs and spaces in indentation” как:

TabError: непоследовательное использование табуляции и пробелов в отступах

Что указывает, что у вас отступы (пространство слево от кода) используют как пробелы так и TAB.

Не следует смешивать пробелы и табуляцию. Код, который смешивает пробелы и табуляцию, может выглядеть по разному в разных редакторах (табы разному количеству пробелов могут соответствовать). Визуально отступы, которые вы видите, могут отличаться от отступов, как их оригинальный автор кода задумывал. В свою очередь, это может отличаться от того как python интерпретатор видит эти отступы. Питон 3 автоматически
TabError
выбрасывает. В Питоне 2, необходимо было -tt опцию командной строки
добавить, чтобы включить проверку.

Отступы имеют значение в Питоне. Руководство по стилю кода для Питона
PEP-8
рекомендует использовать 4 пробела для каждого отступа:

Use 4 spaces per indentation level.

Настройте ваше IDE использовать пробелы для отступов по нажатию на
Tab ↹ клавишу. Есть инструменты, которые автоматически
отформатируют ваш код (autopep8,
yapf, black). Вы можете их
включить в вашем IDE, чтобы они выполнялись при каждом сохранении
кода.

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

Синтаксическая значимость отступов в Питоне гарантирует, что то что вы видите, то и
получите:

if some_condition:
    if another_condition:
        do_something(fancy)
else:
    this_sucks(badluck)

Сравните с С кодом, отступы в котором вводят в заблуждение:

/*  Warning: XXX bogus C code!  */

if (some condition)
     if (another condition)
         do_something(fancy);
else
    this_sucks(badluck);

Здесь else принадлежит внутреннему if, не смотря на
форматирование. Ошибки подобного рода встречаются и на практике
(“goto fail” в
iOS). В gcc 6 новое предупреждение добавили
-Wmisleading-indentation. В отличии от Питона, в С компилятору сложнее определить правильный ли отступ или нет (приходится эвристики использовать).

Сергей

@hardtime88

IT любитель и начинающий специалист

При написании парсера столкнулся с ошибкой

course = {'titel': titel, 'descript': descript, 'url': url}
                                                                              ^
TabError: inconsistent use of tabs and spaces in indentation

не понимаю где косяк с табуляцией


  • Вопрос задан

    более трёх лет назад

  • 21231 просмотр



2

комментария


Решения вопроса 1

longclaps

Что тут не понимать – скопипастил откуда-то кусок, а в нём табы. 3й питон считает ошибкой использование в одном файла одновременно как табов, так и пробелов.


Комментировать

Пригласить эксперта


Ответы на вопрос 1

sim3x

Косяк в том месте куда указал ^


Похожие вопросы


  • Показать ещё
    Загружается…

15 мая 2023, в 11:46

5000 руб./за проект

15 мая 2023, в 11:44

70000 руб./за проект

15 мая 2023, в 11:39

5000 руб./за проект

Минуточку внимания

Table of Contents
Hide
  1. What is inconsistent use of tabs and spaces in indentation error?
  2. How to fix inconsistent use of tabs and spaces in indentation error?
    1. Python and PEP 8 Guidelines 
  3. Conclusion

The TabError: inconsistent use of tabs and spaces in indentation occurs if you indent the code using a combination of whitespaces and tabs in the same code block.

In Python, indentation is most important as it does not use curly braces syntax like other languages to denote where the code block starts and ends.

Without indentation Python will not know which code to execute next or which statement belongs to which block and this will lead to IndentationError.

We can indent the Python code either using spaces or tabs. The Python style guide recommends using spaces for indentation. Further, it states Python disallows mixing tabs and spaces for indentation and doing so will raise Indentation Error.

Let us look at an example to demonstrate the issue.

In the above example, we have a method convert_meter_to_cm(), and the first line of code is indented with a tab, and the second line is indented with four white spaces.

def convert_meter_to_cm(num):
    output = num * 1000
   return output

convert_meter_to_cm(10)

Output

 File "c:PersonalIJSCodeprgm.py", line 3
    return output
                 ^
TabError: inconsistent use of tabs and spaces in indentation

When we execute the program, it clearly shows what the error is and where it occurred with a line number.

How to fix inconsistent use of tabs and spaces in indentation error?

We have used both spaces and tabs in the same code block, and hence we got the error in the first place. We can resolve the error by using either space or a tab in the code block.

Let us indent the code according to the PEP-8 recommendation in our example, i.e., using four white spaces everywhere.

def convert_meter_to_cm(num):
    output = num * 1000
    return output

print(convert_meter_to_cm(10))

Output

10000

If you are using the VS Code, the easy way to solve this error is by using the settings “Convert indentation to spaces” or “Convert indentation to tabs” commands.

  1. Press CTRL + Shift + P or (⌘ + Shift + P on Mac) to open the command palette.
  2. type “convert indentation to” in the search command palette
  3. select your preferred options, either tab or space

Vs Code Convert Indentation To Spaces Or Tabs

TabError: inconsistent use of tabs and spaces in indentation 2

Python and PEP 8 Guidelines 

  1. Generally, in Python, you follow the four-spaces rule according to PEP 8 standards
  2. Spaces are the preferred indentation method. Tabs should be used solely to remain consistent with code that is already indented with tabs.
  3. Do not mix tabs and spaces. Python disallows the mixing of indentation.
  4. Avoid trailing whitespaces anywhere because it’s usually invisible and it causes confusion.

Conclusion

If you mix both tabs and spaces for indentation in the same code block Python will throw inconsistent use of tabs and spaces in indentation. Python is very strict on indentation and we can use either white spaces or tabs in the same code block to resolve the issue.

Ezoic

Avatar Of Srinivas Ramakrishna

Srinivas Ramakrishna is a Solution Architect and has 14+ Years of Experience in the Software Industry. He has published many articles on Medium, Hackernoon, dev.to and solved many problems in StackOverflow. He has core expertise in various technologies such as Microsoft .NET Core, Python, Node.JS, JavaScript, Cloud (Azure), RDBMS (MSSQL), React, Powershell, etc.

Sign Up for Our Newsletters

Subscribe to get notified of the latest articles. We will never spam you. Be a part of our ever-growing community.

By checking this box, you confirm that you have read and are agreeing to our terms of use regarding the storage of the data submitted through this form.

Непоследовательное использование табуляций и пробелов в отступах
Непоследовательное использование табуляций и пробелов в отступах

Узнайте, почему отступ в Python так важен и как вы можете исправить любые ошибки.

Выделение отступов в блоках кода является важной частью программирования; оно служит нескольким целям. Прежде всего, это улучшает читаемость. Представьте, что вы удалили все форматирование из рецепта, оставив только пробелы между списком ингредиентов и инструкциями. Повару было бы трудно следовать этому. В Python отступ также определяет поведение вашего кода. Если вы измените отступ, вы можете изменить, какие части кода выполняются и когда.

Важно понимать, как правильно делать отступы в коде. В этой статье будет рассмотрен конкретный вопрос, касающийся отступов, а именно, что делать со следующим сообщением об ошибке Python: “непоследовательное использование табуляций и пробелов в отступах”.

Отступ 101

Мы проиллюстрируем, как работает отступ в Python, на простом примере. Приведенный ниже блок кода содержит цикл for, который выводит некоторые числа на экран. По завершении будет выведена последняя строка с сообщением “готово”, поскольку два print() оператора имеют отступы разного уровня. Для получения дополнительной информации об print()

>>> for index in range(3):

…     print(index)

… print(‘done’)

Это результат:

0

1

2

done

Теперь для следующего теста попробуйте сделать отступ в последней строке на том же уровне, что и print(index) строка, и снова запустите блок кода. Вы должны заметить, что сообщение “готово” печатается непосредственно после каждого индекса, поскольку теперь оно находится внутри for цикла. Поведение программы изменилось путем изменения отступа блока кода.

Что с пробелами?

Большинство других языков используют фигурные скобки ({}), чтобы сообщить компилятору, где начинаются и заканчиваются блоки кода. Python использует пробелы для обозначения блоков кода; в этом смысле это лишний случай. Однако использование пробелов для отступов освобождает символ для другой цели. Не используя фигурные скобки для обозначения отступа в Python, этот символ можно использовать для создания словаря. Это преимущество, поскольку количество символов на клавиатуре меньше, чем количество вещей, для которых вы хотите использовать символы.

Python не заставляет вас делать отступы с помощью табуляции или пробелов. Оба будут работать; однако вам нужно быть последовательным. Если вы смешаете табуляции и пробелы в одной программе, вы получите ошибку, упомянутую во введении. Мы подробнее рассмотрим это в следующем разделе.

Табуляции против пробелов

Давайте продемонстрируем, почему смешивать табуляции и пробелы – плохая идея. Чтобы воспроизвести ошибку во введении, откройте базовый текстовый редактор, такой как Notepad, и напишите следующий цикл for:

>>> for index in range(3):

…     print(index)

…     print(‘done’)

В print(index) строке должен быть сделан отступ табуляцией, а затем в print(‘done’) строке должно быть указано эквивалентное количество пробелов; обе строки имеют одинаковый уровень отступа. Сохраните ваш файл как test.py. Из командной строки запустите:

>>> python test.py

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

TabError: inconsistent use of tabs and spaces in indentation

Поскольку табуляции и пробелы плохо сочетаются друг с другом, теперь возникает вопрос, что лучше использовать для отступов в коде. На первый взгляд, табуляция кажется предпочтительнее, поскольку она экономит некоторые нажатия клавиш. Но в разных IDE и редакторах кода длина табуляции может отличаться, обычно это 4 или 8 пробелов. Это может быть проблемой, если программа разрабатывается в разных редакторах; после отступа табуляцией в одном редакторе одна и та же вкладка может иметь разную длину в других редакторах. Пробел, с другой стороны, занимает только один символ и позволяет избежать этой потенциальной проблемы.

Это предпочтение пробелов перед табуляциями отражено в рекомендации, представленной в РУКОВОДСТВЕ ПО СТИЛЮ PEP 8 ДЛЯ КОДА PYTHON. В целом, стоит прочитать, поскольку раннее освоение хорошего стиля будет полезно в будущем. Но раздел о ТАБУЛЯЦИЯХ ИЛИ ПРОБЕЛАХ? указано явно:

“Пробелы являются предпочтительным методом отступа. Табуляции следует использовать исключительно для обеспечения согласованности с кодом, который уже имеет отступы с помощью табуляций. Python запрещает смешивать табуляции и пробелы для отступов.”

Кроме того, в разделе о ОТСТУПАХ указано, что следует использовать 4 пробела на уровень отступа. Итак, вот оно. Предпочтительный способ правильного отступа кода в Python – использовать 4 пробела на уровень.

Как отладить “непоследовательное использование табуляций и пробелов в отступах”

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

Большинство текстовых редакторов или IDE имеют функцию ‘найти и заменить’; в Windows вы обычно можете открыть ее, нажав CTRL + f или воспользовавшись панелью инструментов. Если вы нажмете клавишу tab, находясь в поле поиска, вы просто переместите фокус окна, поэтому вам нужно скопировать символ табуляции (‘t’ или ‘ ‘) в поле поиска, а затем ввести 4 пробела (‘ ’) в поле замены. Проблема решена.

Если вы работаете на компьютере с Linux, где у вас не установлен текстовый редактор (например, если вы работаете на удаленном сервере), и вам нужно отредактировать свою программу из командной строки, вы можете попробовать команду SED. Это потоковый редактор, который позволяет вам преобразовывать текст несколькими способами. Чтобы заменить табуляции пробелами, попробуйте что-то вроде этого:

sed -i.bak $’s/t/    /g’ filename

Если вы работаете на компьютере с Windows, ознакомьтесь с SED ДЛЯ WINDOWS

Заключительные слова

Чтобы избежать этой проблемы и оставаться в соответствии с руководством по стилю PEP 8, также неплохо настроить вашу IDE так, чтобы при нажатии клавиши tab всегда вставлялось 4 пробела. Настройка этого зависит от того, какую IDE вы используете. Для тех из вас, кто не знаком с тем, какие IDE доступны, ознакомьтесь с моей статьей Лучшие Python IDE и редакторы кода.

Для пользователей VSCode, если вы посмотрите в правом нижнем углу вашего окна, вы должны увидеть что-то вроде пробелов: 4. Нажав здесь, вы получите возможность настроить метод отступа. Если выбранная вами среда РАЗРАБОТКИ PyCharm, обратитесь к документации по ТАБУЛЯЦИЯМ И ОТСТУПАМ, чтобы получить всю необходимую информацию о настройке этой опции. Пользователям Spyder IDE следует перейти к Инструментам – Настройкам – Редактору – Исходному коду – Символам отступа. Если вы используете более старую версию, это Инструменты – Настройки – Редактор – Дополнительные настройки – Символы отступа.

TabError inconsistent use of tabs and spaces in indentation

In Python, You can indent using tabs and spaces in Python. Both of these are considered to be whitespaces when you code. So, the whitespace or the indentation of the very first line of the program must be maintained all throughout the code. This can be 4 spaces, 1 tab or space. But you must use either a tab or a space to indent your code.

But if you mix the spaces and tabs in a program, Python gets confused. It then throws an error called “TabError inconsistent use of tabs and spaces in indentation”.

In this article, we delve into the details of this error and also look at its solution.

How to fix ‘TabError: inconsistent use of tabs and spaces in indentation’? 

Example:

a = int(input("Please enter an integer A: "))
b = int(input("Please enter an integer B: "))
if b > a:
       print("B is greater than A")
elif a == b:
       print("A and B are equal")
   else:
       print("A is greater than B")

Output:

TabError: inconsistent use of tabs and spaces in indentation

When the code is executed, the “TabError inconsistent use of tabs and spaces in indentation”. This occurs when the code has all the tabs and spaces mixed up.

To fix this, you have to ensure that the code has even indentation. Another way to fix this error is by selecting the entire code by pressing Ctrl + A. Then in the IDLE, go to the Format settings. Click on Untabify region.  

Solution:

1. Add given below line at the beginning of code

#!/usr/bin/python -tt

2. Python IDLE

In case if you are using python IDLE, select all the code by pressing (Ctrl + A) and then go to Format >> Untabify Region

TabError: inconsistent use of tabs and spaces in indentation-1

So, always check the placing of tabs and spaces in your code properly. If you are using a text editor such as Sublime Text, use the option Convert indentation to spaces to make your code free from the “TabError: inconsistent use of tabs and spaces in indentation” error.

Добавить комментарий