Як виправити помилку "несподіваний відступ" у python?
Як виправити помилку "несподіваний відступ" у python?
Відповіді:
Python використовує пробіли на початку рядка, щоб визначити, коли кодові блоки починаються та закінчуються. Помилки, які ви можете отримати:
Несподіваний відступ. Цей рядок коду має більше пробілів на початку, ніж попередній, але попередній не є початком підблока (наприклад, if / while / для оператора). Усі рядки коду в блоці повинні починатися з точно однакового рядка пробілів. Наприклад:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Цей варіант особливо поширений під час інтерактивного запуску python: переконайтеся, що ви не ставите зайвих пробілів перед своїми командами. (Дуже дратує, коли копіювати та вставляти приклад коду!)
>>> print "hello"
IndentationError: unexpected indent
Unindent не відповідає жодному рівню зовнішнього відступу. Цей рядок коду має менше пробілів на початку, ніж попередній, але однаково він не відповідає жодному іншому блоку, до якого він може входити. Python не може вирішити, куди йде. Наприклад, у наступному, чи повинен остаточний друк бути частиною пункту if, чи ні?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Очікується відрізний блок. Цей рядок коду має таку ж кількість пробілів на початку, як попередній, але очікувано, що останній рядок запустить блок (наприклад, if / while / для оператора, визначення функції).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Якщо ви хочете функцію, яка нічого не робить, скористайтеся командою пропуску "без опції" :
>>> def foo():
... pass
Змішування вкладок і пробілів дозволено (принаймні, в моїй версії Python), але Python передбачає, що вкладки мають довжину 8 символів, що може не відповідати вашому редактору. Просто скажіть "ні" на вкладках. Більшість редакторів дозволяють автоматично їх замінювати пробілами.
Найкращий спосіб уникнути цих проблем - це завжди використовувати послідовну кількість пробілів під час відступу субблока та в ідеалі використовувати хороший IDE, який вирішує проблему для вас. Це також зробить ваш код більш читабельним.
У Python інтервал дуже важливий, це дає структуру блоків коду. Ця помилка трапляється, коли ви зіпсуєте свою структуру коду, наприклад, так:
def test_function() :
if 5 > 3 :
print "hello"
Також у вашому файлі може бути суміш вкладок та пробілів.
Я пропоную вам скористатися редактором, знаючим синтаксис python, як-от PyScripter або Netbeans
Увімкніть видимий пробіл у будь-якому редакторі, який ви використовуєте, і увімкніть заміну вкладок пробілами.
Хоча ви можете використовувати вкладки з змішуванням вкладок Python і простір, як правило, призводить до виникнення помилки. Заміна вкладок на 4 пробіли - це рекомендований підхід для написання Python-коду.
Якщо ви пишете Python за допомогою Sublime і отримуєте помилки відступу,
перегляд -> відступ -> перетворення відступів у пробіли
Проблема, яку я описую, викликана текстовим редактором Sublime. Таку ж проблему можуть викликати і інші редактори. По суті, проблема пов’язана з тим, що Python хоче обробляти відступи у вигляді пробілів порівняно з різними редакторами, що кодують відступи у вигляді вкладок.
Переконайтеся, що ви використовуєте у своєму редакторі опцію "вставити пробіли замість вкладок". Тоді ви можете вибрати потрібну ширину вкладок, наприклад 4. Ви можете знайти ці параметри в gedit під редакцією редагування -> налаштування -> редактора.
підсумок: ВИКОРИСТУЙТЕ ПРОСТОРІ, а не вкладки
Ця помилка може виникнути і під час вставлення чогось у інтерпретатор Python (термінал / консоль).
Зауважте, що інтерпретатор інтерпретує порожній рядок як кінець виразу, тому якщо ви вставите щось подібне
def my_function():
x = 3
y = 7
інтерпретатор буде інтерпретувати порожній рядок раніше y = 7
як кінець виразу, тобто, якщо ви закінчили, визначаючи свою функцію, а наступний рядок - y = 7
матиме неправильне відступ, оскільки це новий вираз.
Одне питання, яке, схоже, не було згадане, - це те, що ця помилка може з'явитися через проблему з кодом, яка не має нічого спільного з відступом.
Наприклад, візьміть такий сценарій:
def add_one(x):
try:
return x + 1
add_one(5)
Це повертає, IndentationError: unexpected unindent
коли проблема, звичайно, є відсутнім except:
твердженням.
Мій погляд: перевірте код вище, де повідомляється про несподіваний (не) відступ!
Якщо відступ виглядає нормально, то подивіться, чи має ваш редактор параметр «Перегляд пробілів». Якщо це ввімкнути, це дозволить знайти місце, де пробіли та вкладки змішані.
Є хитрість, яка завжди працювала для мене:
Якщо у вас з'явився і несподіваний відступ, і ви бачите, що весь код ідеально з відступом, спробуйте відкрити його в іншому редакторі, і ви побачите, який рядок коду не відведений.
Це траплялося зі мною, коли вживав vim, gedit або редактори на зразок цього.
Спробуйте використовувати лише 1 редактор для свого коду.
Просто скопіюйте свій скрипт і поставте під "" "весь ваш код" "" ...
вказати цей рядок у змінній .. як,
a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..
тепер виконайте цей код у Sublime Editor за допомогою ctrl + b, тепер він буде друкувати відступний код у консолі. Це воно
Все, що вам потрібно зробити, - це видалити пробіли або пробіли з вкладками з початку наступних кодів
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Виконайте таку команду, щоб вирішити її:
autopep8 -i <filename>.py
Це оновить ваш код і вирішить усі помилки відступу :)
Сподіваюся, це вирішить
Блокнот ++ надав правильний простір на вкладках, але проблема з відступом нарешті була знайдена в текстовому редакторі Sublime.
Використовуйте текстовий редактор Sublime і переходьте по рядку
Відступ у Python важливий, і це просто не для читабельності коду, на відміну від багатьох інших мов програмування. Якщо у вашому коді є якийсь пробіл або вкладка між послідовними командами, python видасть цю помилку, оскільки Python чутливий до цього. Ми, ймовірно, отримаємо цю помилку, коли будемо копіювати та вставляти код на будь-який Python. Обов’язково визначте та видаліть ці пробіли за допомогою текстового редактора, наприклад Notepad ++, або видаліть пробіл вручну з рядка коду, де ви отримуєте помилку.
Step1 :Gives error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]
Дякую!