Когда я запускаю код Python ниже, я получаю эту ошибку [дубликат]

По вопросу «что мне делать с этим» может быть много ответов.

Более «формальный» способ предотвращения таких ошибок при разработке применяя дизайн по контракту в вашем коде. Это означает, что при разработке вы должны установить инварианты класса и / или даже предпосылки для функции и .

Короче говоря, инварианты класса гарантируют, что в вашем классе будут некоторые ограничения, которые не будут нарушены при нормальном использовании (и, следовательно, класс будет not получить в несогласованном состоянии). Предпосылки означают, что данные, данные как входные данные для функции / метода, должны соответствовать установленным ограничениям и никогда не нарушать их, а постулаты означают, что вывод функции / метода должен соответствовать установленным ограничениям снова не нарушая их. Условия контракта никогда не должны нарушаться во время выполнения программы без ошибок, поэтому дизайн по контракту проверяется на практике в режиме отладки, а отключен в выпусках , чтобы максимизировать развитую производительность системы.

Таким образом, вы можете избежать случаев NullReferenceException, которые являются результатом нарушения установленных ограничений. Например, если вы используете свойство объекта X в классе, а затем попытаетесь вызвать один из его методов, а X имеет нулевое значение, то это приведет к NullReferenceException:

public X { get; set; }

public void InvokeX()
{
    X.DoSomething(); // if X value is null, you will get a NullReferenceException
}

Но если вы установите «свойство X никогда не должно иметь нулевого значения» в качестве предпосылки для метода, вы можете предотвратить описанный ранее сценарий:

//Using code contracts:
[ContractInvariantMethod]
protected void ObjectInvariant () 
{
    Contract.Invariant ( X != null );
    //...
}

По этой причине Код Контракт существует для приложений .NET.

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

ОБНОВЛЕНИЕ: Стоит отметить, что этот термин был придуман Бертраном Майером в связи с его дизайном языка программирования Эйфеля .

90
задан SilentGhost 19 June 2009 в 09:03
поделиться

14 ответов

Убедитесь, что вы используете опцию «вставить пробелы вместо вкладок» в свой редактор. Затем вы можете выбрать нужную ширину табуляции, например 4. Вы можете найти эти параметры в gedit в редакторе -> предпочтения -> редактор.

нижняя строка: USE SPACES не вкладки

3
ответ дан Alex 4 September 2018 в 07:50
поделиться

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

Неожиданный отступ. Эта строка кода имеет больше пробелов в начале, чем предыдущая, но первая из них не является началом субблока (например, если / while / for statement). Все строки кода в блоке должны начинаться с точно такой же строки пробелов. Например:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

Это особенно часто встречается при запуске python в интерактивном режиме: убедитесь, что вы не добавляете лишних пробелов перед вашими командами. (Очень раздражает код примера копирования и вставки!) [/ ​​G3]

>>>   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 / for statement, определение функции).

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

Если вам нужна функция, которая ничего не делает, используйте команду «no-op» pass :

>>> def foo():
...     pass

Разрешены смешения вкладок и пробелов (по крайней мере, на моя версия Python), но Python предполагает, что вкладки имеют длину 8 символов, что может не соответствовать вашему редактору. Просто скажите «нет» вкладкам. Большинство редакторов позволяют автоматически их заменять пробелами.

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

113
ответ дан Alice Purcell 4 September 2018 в 07:50
поделиться
  • 1
    хороший информация. Кроме того, я также потратил отступ Неожиданные ошибки, когда он смешивал пробелы с «tab» и «пробел» в NotePad ++, заменил «вкладку» для «пробелов» и зафиксировал. – José Rosas Sáenz 7 April 2015 в 21:42
  • 2
    @ JoséRosasSáenz Ваш комментарий спас меня так много неприятностей – user3726345 19 October 2016 в 18:21
  • 3
    Просто скажите «нет». на вкладки. – Hazem 15 August 2018 в 05:46

Все, что вам нужно сделать, это удалить пробелы или области табуляции с начала следующих кодов

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
0
ответ дан Bhargav Rao 4 September 2018 в 07:50
поделиться

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

8
ответ дан duffymo 4 September 2018 в 07:50
поделиться

Notepad ++ дал поле вкладки правильно, но проблема с отступом была наконец найдена в текстовом редакторе Sublime.

Использовать Sublime текстовый редактор и идти по строкам

1
ответ дан HimalayanCoder 4 September 2018 в 07:50
поделиться

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

Хотя вы можете использовать вкладки с вкладками микширования Python, а пространство обычно приводит к ошибке, которую вы испытываете. Замена вкладок на 4 пробела - рекомендуемый подход для написания кода Python.

13
ответ дан James McMahon 4 September 2018 в 07:50
поделиться

Есть трюк, который всегда работал для меня:

Если у вас есть и неожиданный отступ, и вы видите, что весь код отлично отступом, попробуйте открыть его другим редактором, и вы увидите, какая строка Код не отступы.

Это случилось со мной, когда вы использовали vim, gedit или редакторы.

Попробуйте использовать только 1 редактор для вашего кода.

2
ответ дан Jesus Rodriguez 4 September 2018 в 07:50
поделиться

Запустите код с параметром -tt, чтобы узнать, используете ли вы вкладки и пробелы непоследовательно

17
ответ дан Manoj I 4 September 2018 в 07:50
поделиться

Просто скопируйте свой скрипт и поставьте под "" "весь ваш код" "" ...

укажите эту строку в переменной .. like,

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..

now выполните этот код, в Sublime Editor, используя ctrl + b, теперь он будет печатать отступы в консоли. вот он

2
ответ дан Mohideen ibn Mohammed 4 September 2018 в 07:50
поделиться
  • 1
    как я запустил свой код. Должен ли я удалить «& quot;» & quot; и "& quot;" & quot; и распечатать a.replace и запустить его в обычном режиме? – chibole 30 December 2017 в 11:24
  • 2
    нет "& quot;" & quot; & Quot; & Quot; & Quot; (тройные кавычки) ссылаются на ваш контент, а не на строку. его необходимо, потому что ваш код может содержать строку, которая представляет собой одинарные / двойные кавычки, поэтому & quot; & quot; & quot; обязательный. – Mohideen ibn Mohammed 30 December 2017 в 12:53

Если вы пишете Python с использованием Sublime и получаете ошибки отступов,

view -> indentation -> преобразуйте отступ в пробелы

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

3
ответ дан Puneet Lamba 4 September 2018 в 07:50
поделиться
  • 1
    ох ... так возвышенно вызывает это? – nsd 30 April 2017 в 10:57
  • 2
    Да, проблема, которую я описываю, вызвана Sublime. Может быть вызвано и другими редакторами. По сути, проблема связана с тем, что Python хочет обрабатывать отступы в терминах пробелов и разных редакторов, кодирующих отступы с точки зрения вкладок. – Puneet Lamba 4 May 2017 в 20:42
  • 3
    У меня была такая же проблема с notepad ++. То, что встретило глаза, правда, потребовалось некоторое время, чтобы взломать это. Мне приходилось перемещать курсор на один символ за раз, чтобы понять, что редактор конвертировал некоторые пробелы в вкладки – Bharat Anand 8 February 2018 в 02:54

Если отступы выглядят нормально, посмотрите, есть ли у вашего редактора опция «View Whitespace». Включение этого параметра должно позволять находить места, где смешиваются пробелы и вкладки.

1
ответ дан user 4 September 2018 в 07:50
поделиться

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

Например, возьмите следующий скрипт :

def add_one(x):
    try:
        return x + 1
add_one(5)

Это возвращает IndentationError: unexpected unindent, когда проблема, конечно, является отсутствующим оператором except:.

Моя точка: проверьте код выше, где неожиданное (un) отступ сообщается!

0
ответ дан WMoreland 4 September 2018 в 07:50
поделиться

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

def test_function() :
   if 5 > 3 :
   print "hello"

В вашем файле также может быть сочетание вкладок и пробелов.

Я предлагаю вам используйте редактор, поддерживающий синтаксис python, например PyScripter или Netbeans

21
ответ дан yanjost 4 September 2018 в 07:50
поделиться
  • 1
    +1: сочетание TAB и пробелов – van 19 June 2009 в 09:11
  • 2
    Да, безусловно, используйте редакторы, поддерживающие python! У меня была проблема, когда я редактировал в блокноте ++ с настройками по умолчанию, и он получал неправильные пробелы – Dave Archer 19 June 2009 в 09:13
  • 3
    смешанные вкладки и пробелы "SyntaxError: непоследовательное использование вкладок и пробелов в отступе" – SilentGhost 19 June 2009 в 11:22
  • 4
    Плагин Python Netbeans, как и хедз-ап, в настоящее время не конвертирует вкладки в пробелы из существующего кода. Однако он будет делать это при написании нового кода. – James McMahon 19 June 2009 в 12:27
  • 5
    PyCharm может преобразовывать его последовательно. Также он будет выделять линии при «ошибке». Я использую кавычки, потому что это не 1960-е, и я не могу поверить в замечательный язык, такой как у Python все еще есть этот мозг, мертвый, теряющий время недостаток. – Echelon 10 February 2012 в 01:14

Эта ошибка также может возникать при вставке чего-либо в интерпретатор Python (терминал / консоль).

Обратите внимание, что интерпретатор интерпретирует пустую строку как конец выражения, поэтому, если вы вставляете что-то вроде

def my_function():
    x = 3

    y = 7

, интерпретатор будет интерпретировать пустую строку до y = 7 как конец выражения, т. е. что вы закончили определение своей функции, а следующая строка - y = 7 будет иметь неправильный отступ, потому что это новое выражение.

3
ответ дан Zoltán 4 September 2018 в 07:50
поделиться
  • 1
    что пустые строки в определении функции прекрасны, , но они все равно должны иметь начальные пробелы, поскольку Python интерпретирует любую пустую строку как конец функции – MichaelChirico 19 June 2017 в 01:45
Другие вопросы по тегам:

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