Unexpected indent python ошибка перевод

1 ответ

Если бы вы перевели текст ошибки, вы бы поняли, что у вас проблема с отступами.
Обратите внимание на отступ перед import.

Напоминаю, что в python блоки кода разграничиваются отступами.

Если питон счёл, что у вас вложенность кода обозначается четырьмя
пробелами, а именно эта строка отбита одним табом, то будет такая
ошибка.

На основе этого ответа.

В данном случае отступ вообще следует удалить.

ответ дан 26 фев 2016 в 21:13

VenZell's user avatar

VenZellVenZell

19.9k5 золотых знаков44 серебряных знака61 бронзовый знак

1

  • Окей , у меня такая же проблема но в коде .( Я учусь и решил написать простой калькулятор) Но удаляю абсолютно все отступы которые присутствуют в коде и все равно также ошибка .

    26 фев 2019 в 13:38

Вопросик, я только начал изучать питон, учусь по книжке, там говорят про отступы, но почему выдает ошибку IndentationError: unexpected indent? там не перемешаны пробелы и табы, я пробовал и 4 пробела везде проставить и табы, ошибка одна( код вообще рандомный, просто для проверки сделал)

df = (200, 300)
	print('обычный форма:')
	print(df)

df = (300, 400)
	print('\nмодернизация:')
	print(df)


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

  • 8373 просмотра

Так и пишет, неожиданный отступ.

Если код так и выглядит

df = (200, 300)
  print('обычный форма:')
  print(df)

df = (300, 400)
  print('\nмодернизация:')
  print(df)

То ошибка вполне логична, перед print() зачем-то стоят отступы, которых быть не должно

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


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

21 сент. 2023, в 20:54

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

21 сент. 2023, в 20:40

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

21 сент. 2023, в 19:28

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

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

На чтение 6 мин. Просмотров 37.2k. Опубликовано

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

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

1) Пропущено двоеточие в конце строки после управляющих конструкций типа if, elif, else, for, while, class, or def, что приведет к ошибке типа SyntaxError: invalid syntax

Пример кода:

if spam == 42

    print(‘Hello!’)

2) Использование = вместо == приводит к ошибке типа SyntaxError: invalid syntax

Символ = является оператором присваивания, а символ == — оператором сравнения.

Эта ошибка возникает в следующем коде:

if spam = 42:

    print(‘Hello!’)

3) Использование неправильного количества отступов.

Возникнет ошибка типа IndentationError: unexpected indent, IndentationError: unindent does not match any outer indentation level и IndentationError: expected an indented block

Нужно помнить, что отступ необходимо делать только после :, а по завершению блока обязательно вернуться к прежнему количеству отступов.

Пример ошибки:

print(‘Hello!’)

    print(‘Howdy!’)

и тут

if spam == 42:

    print(‘Hello!’)

  print(‘Howdy!’)

и тут

if spam == 42:

print(‘Hello!’)

4) Неиспользование функции len() в объявлении цикла for для списков list

Возникнет ошибка типа TypeError: ‘list’ object cannot be interpreted as an integer

Часто возникает желание пройти в цикле по индексам элементов списка или строки, при этом требуется использовать функцию range(). Нужно помнить, что необходимо получить значение len(someList) вместо самого значения someList

Ошибка возникнет в следующем коде:

spam = [‘cat’, ‘dog’, ‘mouse’]

for i in range(spam):

    print(spam[i])

Некоторые читатели (оригинальной статьи) заметили, что лучше использовать конструкцию типа for i in spam:, чем написанный код выше. Но, когда нужно получить номер итерации в цикле, использование вышенаписанного кода намного полезнее, чем получение значения списка.

От переводчика: Иногда можно ошибочно перепутать метод shape с len() для определения размера списка. При этом возникает ошибка типа ‘list’ object has no attribute ‘shape’

5) Попытка изменить часть строки. (Ошибка типа TypeError: ‘str’ object does not support item assignment)

Строки имеют неизменяемый тип. Эта ошибка произойдет в следующем коде:

spam = ‘I have a pet cat.’

spam[13] = ‘r’

print(spam)

А ожидается такое результат:

spam = ‘I have a pet cat.’

spam = spam[:13] + ‘r’ + spam[14:]

print(spam)

От переводчика: Подробней про неизменяемость строк можно прочитать тут

6) Попытка соединить нестроковую переменную со строкой приведет к ошибке TypeError: Can’t convert ‘int’ object to str implicitly

Такая ошибка произойдет тут:

numEggs = 12

print(‘I have ‘ + numEggs + ‘ eggs.’)

А нужно так:

numEggs = 12

print(‘I have ‘ + str(numEggs) + ‘ eggs.’)

или так:

numEggs = 12

print(‘I have %s eggs.’ % (numEggs))

От переводчика: еще удобно так

print(‘This {1} xorosho{0}’.format(‘!’,‘is’))

# This is xorosho!

7) Пропущена одинарная кавычка в начале или конце строковой переменной (Ошибка SyntaxError: EOL while scanning string literal)

Такая ошибка произойдет в следующем коде:

или в этом:

или в этом:

myName = ‘Al’

print(‘My name is ‘ + myName + . How are you?)

8) Опечатка в названии переменной или функции (Ошибка типа NameError: name ‘fooba’ is not defined)

Такая ошибка может встретиться в таком коде:

foobar = ‘Al’

print(‘My name is ‘ + fooba)

или в этом:

или в этом:

От переводчика: очень часто при написании возникают ошибки типа NameError: name ‘true’ is not defined и NameError: name ‘false’ is not defined, связанные с тем, что нужно писать булевные значения с большой буквы True и False

9) Ошибка при обращении к методу объекта. (Ошибка типа AttributeError: ‘str’ object has no attribute ‘lowerr’)

Такая ошибка произойдет в следующем коде:

spam = ‘THIS IS IN LOWERCASE.’

spam = spam.lowerr()

10) Попытка использовать индекс вне границ списка. (Ошибка типа IndexError: list index out of range)

Ошибка возникает в следующем коде:

spam = [‘cat’, ‘dog’, ‘mouse’]

print(spam[6])

11) Использование несуществующих ключей для словаря. (Ошибка типа KeyError: ‘spam’)

Ошибка произойдет в следующем коде:

spam = {‘cat’: ‘Zophie’, ‘dog’: ‘Basil’, ‘mouse’: ‘Whiskers’}

print(‘The name of my pet zebra is ‘ + spam[‘zebra’])

12) Использование зарезервированных в питоне ключевых слов в качестве имени для переменной. (Ошибка типа SyntaxError: invalid syntax)

Ключевые слова (зарезервированные) в питоне невозможно использовать как переменные. Пример в следующем коде:

Python 3 имеет следующие ключевые слова: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

13) Использование операторов присваивания для новой неинициализированной переменной. (Ошибка типа NameError: name ‘foobar’ is not defined)

Не стоит надеяться, что переменные инициализируются при старте каким-нибудь значением типа 0 или пустой строкой.

Эта ошибка встречается в следующем коде:

spam = 0

spam += 42

eggs += 42

Операторы присваивания типа spam += 1 эквивалентны spam = spam + 1. Это означает, что переменная spam уже должна иметь какое-то значение до.

14) Использование локальных переменных, совпадающих по названию с глобальными переменными, в функции до инициализации локальной переменной. (Ошибка типа UnboundLocalError: local variable ‘foobar’ referenced before assignment)

Использование локальной переменной в функции с именем, совпадающим с глобальной переменной, опасно. Правило: если переменная в функции использовалась с оператором присвоения, это всегда локальная переменная для этой функции. В противном случае, это глобальная переменная внутри функции.

Это означает, что нельзя использовать глобальную переменную (с одинаковым именем как у локальной переменной) в функции до ее определения.

Код с появлением этой ошибки такой:

someVar = 42

def myFunction():

    print(someVar)

    someVar = 100

myFunction()

15) Попытка использовать range() для создания списка целых чисел. (Ошибка типа TypeError: ‘range’ object does not support item assignment)

Иногда хочется получить список целых чисел по порядку, поэтому range() кажется подходящей функцией для генерации такого списка. Тем не менее нужно помнить, что range() возвращает range object, а не список целых чисел.

Пример ошибки в следующем коде:

spam = range(10)

spam[4] = 1

Кстати, это работает в Python 2, так как range() возвращает список. Однако попытка выполнить код в Python 3 приведет к описанной ошибке.

Нужно сделать так:

spam = list(range(10))

spam[4] = 1

16) Отсутствие операторов инкремента ++ или декремента . (Ошибка типа SyntaxError: invalid syntax)

Если вы пришли из другого языка типа C++, Java или PHP, вы можете попробовать использовать операторы ++ или для переменных. В Питоне таких операторов нет.

Ошибка возникает в следующем коде:

Нужно написать так:

17) Как заметил читатель Luciano в комментариях к статье (оригинальной), также часто забывают добавлять self как первый параметр для метода. (Ошибка типа TypeError: myMethod() takes no arguments (1 given)

Эта ошибка возникает в следующем коде:

class Foo():

    def myMethod():

        print(‘Hello!’)

a = Foo()

a.myMethod()

Краткое объяснение различных сообщений об ошибках представлено в Appendix D of the «Invent with Python» book.

Полезные материалы

Оригинал статьи

Наиболее частые проблемы Python и решения (перевод)

Вещи, о которых следует помнить, программируя на Python

Python 3 для начинающих: Часто задаваемые вопросы

Автор оригинала: Chris.

Если вы похожи на меня, вы сначала попробуйте все в своем коде и исправить ошибки, как они приходят. Одна частая ошибка в Python – IndentationError: неожиданный отступ Отказ Итак, что означает это сообщение об ошибке?

Ошибка . IndentationError: неожиданный отступ Возникает, если вы используете непоследовательную отступ вкладок или пробелы для блоков кода с отступом, таких как Если блок и для петля. Например, Python бросит ошибку вдавливания, если вы используете для петля с три персонажа пробелов Отступ для первой строки и Один символ вкладок отступ второй строки корпуса петли. Чтобы устранить ошибку, используйте одинаковое количество пустых пробелов для всех блоков кода с отступом.

Давайте посмотрим на пример, где возникает эта ошибка:

for i in range(10):
  print(i)
   print('--')

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

Чтобы исправить ошибку, просто используйте одинаковое количество пробелов для каждой строки кода:

for i in range(10):
    print(i)
    print('--')

Общая рекомендация состоит в том, чтобы использовать четыре единственных пробелных персонажей '' для каждого Отступ уровень. Если у вас вложенные уровни вдавливания, это означает, что второй уровень вдавливания имеет одновение пробелы:

for i in range(10):
    for j in range(10):
        print(i, j)

Смесительные вкладки и пробелы частоты часто вызывают ошибку

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

На первый взгляд углубление выглядит одинаково. Однако, если вы пройдете пробелы перед Печать (I) , вы видите, что он состоит только из одного табличного характера, в то время как пробелы перед Распечатать (j) Заявление состоит из ряда пустых мест '' Отказ

Попробуйте сами: Прежде чем я скажу вам, что делать с этим, попробуйте исправить код себя в нашей интерактивной оболочке Python:

Упражнение : Исправьте код в оболочке интерактивного кода, чтобы избавиться от сообщения об ошибке.

Вы хотите развивать навыки Хорошо округлый Python Professional То же оплачивается в процессе? Станьте питоном фрилансером и закажите свою книгу Оставляя крысиную гонку с Python На Amazon ( Kindle/Print )!

Как исправить ошибку отступа на все времена?

Источник ошибки часто является неправильным использованием вкладок и пробеловных символов. Во многих редакторах кода вы можете установить символ вкладки на фиксированное количество символов пробела. Таким образом, вы, по сути никогда не используете сам табличный символ. Например, если у вас есть Sublime Text Editor, следующее быстрое руководство гарантирует, что вы никогда не будете работать в этой ошибке:

  • Установить Возвышенный текст Использовать вкладки для отступа: Вид -> Отступ -> Преобразовать вдавшиеся вкладки
  • Снимите флажок Опция Отступ с использованием пробелов в том же подменю выше.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

1 ответ

Если бы вы перевели текст ошибки, вы бы поняли, что у вас проблема с отступами.
Обратите внимание на отступ перед import.

Напоминаю, что в python блоки кода разграничиваются отступами.

Если питон счёл, что у вас вложенность кода обозначается четырьмя
пробелами, а именно эта строка отбита одним табом, то будет такая
ошибка.

На основе этого ответа.

В данном случае отступ вообще следует удалить.

ответ дан 26 фев 2016 в 21:13

VenZell's user avatar

VenZellVenZell

19.8k5 золотых знаков43 серебряных знака61 бронзовый знак

1

  • Окей , у меня такая же проблема но в коде .( Я учусь и решил написать простой калькулятор) Но удаляю абсолютно все отступы которые присутствуют в коде и все равно также ошибка .

    26 фев 2019 в 13:38

Вопросик, я только начал изучать питон, учусь по книжке, там говорят про отступы, но почему выдает ошибку IndentationError: unexpected indent? там не перемешаны пробелы и табы, я пробовал и 4 пробела везде проставить и табы, ошибка одна( код вообще рандомный, просто для проверки сделал)

df = (200, 300)
	print('обычный форма:')
	print(df)

df = (300, 400)
	print('nмодернизация:')
	print(df)

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

    22 мар.

  • 6176 просмотров

Так и пишет, неожиданный отступ.

Если код так и выглядит

df = (200, 300)
	print('обычный форма:')
	print(df)

df = (300, 400)
	print('nмодернизация:')
	print(df)

То ошибка вполне логична, перед print() зачем-то стоят отступы, которых быть не должно

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


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

22 июн. 2023, в 10:00

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

22 июн. 2023, в 09:55

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

22 июн. 2023, в 09:29

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

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

На чтение 6 мин. Просмотров 36.8k. Опубликовано 03.12.2016

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

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

1) Пропущено двоеточие в конце строки после управляющих конструкций типа if, elif, else, for, while, class, or def, что приведет к ошибке типа SyntaxError: invalid syntax

Пример кода:

if spam == 42

    print(‘Hello!’)

2) Использование = вместо == приводит к ошибке типа SyntaxError: invalid syntax

Символ = является оператором присваивания, а символ == — оператором сравнения.

Эта ошибка возникает в следующем коде:

if spam = 42:

    print(‘Hello!’)

3) Использование неправильного количества отступов.

Возникнет ошибка типа IndentationError: unexpected indent, IndentationError: unindent does not match any outer indentation level и IndentationError: expected an indented block

Нужно помнить, что отступ необходимо делать только после :, а по завершению блока обязательно вернуться к прежнему количеству отступов.

Пример ошибки:

print(‘Hello!’)

    print(‘Howdy!’)

и тут

if spam == 42:

    print(‘Hello!’)

  print(‘Howdy!’)

и тут

if spam == 42:

print(‘Hello!’)

4) Неиспользование функции len() в объявлении цикла for для списков list

Возникнет ошибка типа TypeError: ‘list’ object cannot be interpreted as an integer

Часто возникает желание пройти в цикле по индексам элементов списка или строки, при этом требуется использовать функцию range(). Нужно помнить, что необходимо получить значение len(someList) вместо самого значения someList

Ошибка возникнет в следующем коде:

spam = [‘cat’, ‘dog’, ‘mouse’]

for i in range(spam):

    print(spam[i])

Некоторые читатели (оригинальной статьи) заметили, что лучше использовать конструкцию типа for i in spam:, чем написанный код выше. Но, когда нужно получить номер итерации в цикле, использование вышенаписанного кода намного полезнее, чем получение значения списка.

От переводчика: Иногда можно ошибочно перепутать метод shape с len() для определения размера списка. При этом возникает ошибка типа ‘list’ object has no attribute ‘shape’

5) Попытка изменить часть строки. (Ошибка типа TypeError: ‘str’ object does not support item assignment)

Строки имеют неизменяемый тип. Эта ошибка произойдет в следующем коде:

spam = ‘I have a pet cat.’

spam[13] = ‘r’

print(spam)

А ожидается такое результат:

spam = ‘I have a pet cat.’

spam = spam[:13] + ‘r’ + spam[14:]

print(spam)

От переводчика: Подробней про неизменяемость строк можно прочитать тут

6) Попытка соединить нестроковую переменную со строкой приведет к ошибке TypeError: Can’t convert ‘int’ object to str implicitly

Такая ошибка произойдет тут:

numEggs = 12

print(‘I have ‘ + numEggs + ‘ eggs.’)

А нужно так:

numEggs = 12

print(‘I have ‘ + str(numEggs) + ‘ eggs.’)

или так:

numEggs = 12

print(‘I have %s eggs.’ % (numEggs))

От переводчика: еще удобно так

print(‘This {1} xorosho{0}’.format(‘!’,‘is’))

# This is xorosho!

7) Пропущена одинарная кавычка в начале или конце строковой переменной (Ошибка SyntaxError: EOL while scanning string literal)

Такая ошибка произойдет в следующем коде:

или в этом:

или в этом:

myName = ‘Al’

print(‘My name is ‘ + myName + . How are you?)

8) Опечатка в названии переменной или функции (Ошибка типа NameError: name ‘fooba’ is not defined)

Такая ошибка может встретиться в таком коде:

foobar = ‘Al’

print(‘My name is ‘ + fooba)

или в этом:

или в этом:

От переводчика: очень часто при написании возникают ошибки типа NameError: name ‘true’ is not defined и NameError: name ‘false’ is not defined, связанные с тем, что нужно писать булевные значения с большой буквы True и False

9) Ошибка при обращении к методу объекта. (Ошибка типа AttributeError: ‘str’ object has no attribute ‘lowerr’)

Такая ошибка произойдет в следующем коде:

spam = ‘THIS IS IN LOWERCASE.’

spam = spam.lowerr()

10) Попытка использовать индекс вне границ списка. (Ошибка типа IndexError: list index out of range)

Ошибка возникает в следующем коде:

spam = [‘cat’, ‘dog’, ‘mouse’]

print(spam[6])

11) Использование несуществующих ключей для словаря. (Ошибка типа KeyError: ‘spam’)

Ошибка произойдет в следующем коде:

spam = {‘cat’: ‘Zophie’, ‘dog’: ‘Basil’, ‘mouse’: ‘Whiskers’}

print(‘The name of my pet zebra is ‘ + spam[‘zebra’])

12) Использование зарезервированных в питоне ключевых слов в качестве имени для переменной. (Ошибка типа SyntaxError: invalid syntax)

Ключевые слова (зарезервированные) в питоне невозможно использовать как переменные. Пример в следующем коде:

Python 3 имеет следующие ключевые слова: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

13) Использование операторов присваивания для новой неинициализированной переменной. (Ошибка типа NameError: name ‘foobar’ is not defined)

Не стоит надеяться, что переменные инициализируются при старте каким-нибудь значением типа 0 или пустой строкой.

Эта ошибка встречается в следующем коде:

spam = 0

spam += 42

eggs += 42

Операторы присваивания типа spam += 1 эквивалентны spam = spam + 1. Это означает, что переменная spam уже должна иметь какое-то значение до.

14) Использование локальных переменных, совпадающих по названию с глобальными переменными, в функции до инициализации локальной переменной. (Ошибка типа UnboundLocalError: local variable ‘foobar’ referenced before assignment)

Использование локальной переменной в функции с именем, совпадающим с глобальной переменной, опасно. Правило: если переменная в функции использовалась с оператором присвоения, это всегда локальная переменная для этой функции. В противном случае, это глобальная переменная внутри функции.

Это означает, что нельзя использовать глобальную переменную (с одинаковым именем как у локальной переменной) в функции до ее определения.

Код с появлением этой ошибки такой:

someVar = 42

def myFunction():

    print(someVar)

    someVar = 100

myFunction()

15) Попытка использовать range() для создания списка целых чисел. (Ошибка типа TypeError: ‘range’ object does not support item assignment)

Иногда хочется получить список целых чисел по порядку, поэтому range() кажется подходящей функцией для генерации такого списка. Тем не менее нужно помнить, что range() возвращает range object, а не список целых чисел.

Пример ошибки в следующем коде:

spam = range(10)

spam[4] = 1

Кстати, это работает в Python 2, так как range() возвращает список. Однако попытка выполнить код в Python 3 приведет к описанной ошибке.

Нужно сделать так:

spam = list(range(10))

spam[4] = 1

16) Отсутствие операторов инкремента ++ или декремента . (Ошибка типа SyntaxError: invalid syntax)

Если вы пришли из другого языка типа C++, Java или PHP, вы можете попробовать использовать операторы ++ или для переменных. В Питоне таких операторов нет.

Ошибка возникает в следующем коде:

Нужно написать так:

17) Как заметил читатель Luciano в комментариях к статье (оригинальной), также часто забывают добавлять self как первый параметр для метода. (Ошибка типа TypeError: myMethod() takes no arguments (1 given)

Эта ошибка возникает в следующем коде:

class Foo():

    def myMethod():

        print(‘Hello!’)

a = Foo()

a.myMethod()

Краткое объяснение различных сообщений об ошибках представлено в Appendix D of the «Invent with Python» book.

Полезные материалы

Оригинал статьи

Наиболее частые проблемы Python и решения (перевод)

Вещи, о которых следует помнить, программируя на Python

Python 3 для начинающих: Часто задаваемые вопросы

Программирование, Python, Учебный процесс в IT, Блог компании SkillFactory


Рекомендация: подборка платных и бесплатных курсов PR-менеджеров — https://katalog-kursov.ru/

image

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

1) Пропуск “:” после оператора if, elif, else, for, while, class или def. (Сообщение об ошибке: “SyntaxError: invalid syntax”)

Пример кода с ошибкой:

if spam == 42

    print('Hello!')

2) Использование = вместо ==. (Сообщение об ошибке: “SyntaxError: invalid syntax”)

= является оператором присваивания, а == является оператором сравнения «равно». Пример кода с ошибкой:

if spam = 42:

    print('Hello!')

3) Использование неправильного количества отступов. (Сообщение об ошибке: «IndentationError: unexpected indent» и «IndentationError: unindent does not match any outer indentation level» и «IndentationError: expected an indented block»)

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

print('Hello!')

    print('Howdy!')

… еще:

if spam == 42:

    print('Hello!')

  print('Howdy!')

… еще:

if spam == 42:

print('Hello!')

4) Забыть вызвать len() в операторе цикла for. (Сообщение об ошибке: “TypeError: 'list' object cannot be interpreted as an integer”)

Обычно вы хотите перебирать индексы элементов в списке или строке, что требует вызова функции range(). Просто не забудьте передать возвращаемое значение len(someList) вместо передачи только someList.

Пример кода с ошикой:

spam = ['cat', 'dog', 'mouse']

for i in range(spam):

    print(spam[i])

(UPD: как некоторые указали, вам может понадобиться только for i in spam: вместо приведенного выше кода. Но вышесказанное относится к очень законному случаю, когда вам нужен индекс в теле цикла, а не только само значение.)

5) Попытка изменить строковое значение. (Сообщение об ошибке: “TypeError: 'str' object does not support item assignment”)

Строки являются неизменным типом данных. Пример кода с ошибкой:

spam = 'I have a pet cat.'

spam[13] = 'r'

print(spam)

Пример правильного варианта:

spam = 'I have a pet cat.'

spam = spam[:13] + 'r' + spam[14:]

print(spam)

6) Попытка объединить не строковое значение в строковое значение. (Сообщение об ошибке: “TypeError: Can't convert 'int' object to str implicitly”)

Пример кода с ошибкой:

numEggs = 12
print('I have ' + numEggs + ' eggs.')
Правильный вариант:
numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')

… или:

numEggs = 12
print('I have %s eggs.' % (numEggs))

7) Пропуск кавычки, в начале или конце строкового значения. (Сообщение об ошибке: “SyntaxError: EOL while scanning string literal”)

Пример кода с ошикой:

print(Hello!')

… еще:

print('Hello!)
...еще:
myName = 'Al'
print('My name is ' + myName + . How are you?')

8) Опечатка в переменной или имени функции. (Сообщение об ошибке: “NameError: name 'fooba' is not defined”)

Пример кода с ошибкой:

foobar = 'Al'
print('My name is ' + fooba)
...еще:
spam = ruond(4.2)
...еще:
spam = Round(4.2)

9) Опечатка в названии метода. (Сообщение об ошибке: “AttributeError: 'str' object has no attribute 'lowerr'”)

Пример кода с ошибкой:

spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()

10) Выход за пределы массива. (Сообщение об ошибке: “IndexError: list index out of range”)

Пример кода с ошибкой:

spam = ['cat', 'dog', 'mouse']
print(spam[6])

11) Использование несуществующего ключа словаря. (Сообщение об ошибке: “KeyError: 'spam'”)

Пример кода с ошибкой:

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])

12) Попытка использовать ключевые слова Python в качестве переменной (Сообщение об ошибке: “SyntaxError: invalid syntax”)

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

class = 'algebra'

Ключевые слова Python 3: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

13) Использование расширенного оператора присваивания для новой переменной. (Сообщение об ошибке: “NameError: name 'foobar' is not defined”)

Не думайте, что переменные начинаются со значения, такого как 0 или пустая строка. Выражение с расширенным оператором как spam += 1 эквивалентно spam = spam + 1. Это означает, что для начала в spam должно быть какое-то значение.

Пример кода с ошибкой:

spam = 0
spam += 42
eggs += 42

14) Использование локальных переменных (с таким же именем как и у глобальной переменной) в функции до назначения локальной переменной. (Сообщение об ошибке: “UnboundLocalError: local variable 'foobar' referenced before assignment”)

Использовать локальную переменную в функции, имя которой совпадает с именем глобальной переменной, довольно сложно. Правило таково: если переменной в функции когда-либо назначается что-то, она всегда является локальной переменной, когда используется внутри этой функции. В противном случае, это глобальная переменная внутри этой функции.
Это означает, что вы не можете использовать ее как глобальную переменную в функции до ее назначения.

Пример кода с ошибкой:

someVar = 42
def myFunction():
    print(someVar)
    someVar = 100
myFunction()

15) Попытка использовать range() для создания списка целых чисел. (Сообщение об ошибке: “TypeError: 'range' object does not support item assignment”)

Иногда вам нужен список целочисленных значений по порядку, поэтому range() кажется хорошим способом создать этот список. Однако вы должны помнить, что range() возвращает «объект диапазона», а не фактическое значение списка.

Пример кода с ошибкой:

spam = range(10)
spam[4] = -1
То что вы хотите сделать, выглядит так:
spam = list(range(10))
spam[4] = -1

(UPD: Это работает в Python 2, потому что Python 2’s range() возвращает список значений. Но, попробовав сделать это в Python 3, вы увидите ошибку.)

16) Нет оператора ++ инкремента или -- декремента. (Сообщение об ошибке: “SyntaxError: invalid syntax”)

Если вы пришли из другого языка программирования, такого как C++, Java или PHP, вы можете попытаться увеличить или уменьшить переменную с помощью ++ или --. В Python таких операторов нет.

Пример кода с ошибкой:

spam = 0
spam++
То что вы хотите сделать, выглядит так:
spam = 0
spam += 1

17) UPD: как указывает Luchano в комментариях, также часто забывают добавить self в качестве первого параметра для метода. (Сообщение об ошибке: «TypeError: TypeError: myMethod() takes no arguments (1 given)»)

Пример кода с ошибкой:

class Foo():
    def myMethod():
        print('Hello!')
a = Foo()
a.myMethod()

Краткое объяснение различных сообщений об ошибках приведено в Приложении D книги «Invent with Python».


image
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:

  • Курс «Профессия Data Scientist» (24 месяца)
  • Курс «Профессия Data Analyst» (18 месяцев)
  • Курс «Python для веб-разработки» (9 месяцев)

Читать еще

  • 450 бесплатных курсов от Лиги Плюща
  • Бесплатные курсы по Data Science от Harvard University
  • 30 лайфхаков чтобы пройти онлайн-курс до конца
  • Самый успешный и самый скандальный Data Science проект: Cambridge Analytica

Автор оригинала: Chris.

Если вы похожи на меня, вы сначала попробуйте все в своем коде и исправить ошибки, как они приходят. Одна частая ошибка в Python – IndentationError: неожиданный отступ Отказ Итак, что означает это сообщение об ошибке?

Ошибка . IndentationError: неожиданный отступ Возникает, если вы используете непоследовательную отступ вкладок или пробелы для блоков кода с отступом, таких как Если блок и для петля. Например, Python бросит ошибку вдавливания, если вы используете для петля с три персонажа пробелов Отступ для первой строки и Один символ вкладок отступ второй строки корпуса петли. Чтобы устранить ошибку, используйте одинаковое количество пустых пробелов для всех блоков кода с отступом.

Давайте посмотрим на пример, где возникает эта ошибка:

for i in range(10):
  print(i)
   print('--')

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

Чтобы исправить ошибку, просто используйте одинаковое количество пробелов для каждой строки кода:

for i in range(10):
  print(i)
   print('--')

Общая рекомендация состоит в том, чтобы использовать четыре единственных пробелных персонажей '' для каждого Отступ уровень. Если у вас вложенные уровни вдавливания, это означает, что второй уровень вдавливания имеет одновение пробелы:

for i in range(10):
    for j in range(10):
        print(i, j)

Смесительные вкладки и пробелы частоты часто вызывают ошибку

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

На первый взгляд углубление выглядит одинаково. Однако, если вы пройдете пробелы перед Печать (I) , вы видите, что он состоит только из одного табличного характера, в то время как пробелы перед Распечатать (j) Заявление состоит из ряда пустых мест '' Отказ

Попробуйте сами: Прежде чем я скажу вам, что делать с этим, попробуйте исправить код себя в нашей интерактивной оболочке Python:

Упражнение : Исправьте код в оболочке интерактивного кода, чтобы избавиться от сообщения об ошибке.

Вы хотите развивать навыки Хорошо округлый Python Professional То же оплачивается в процессе? Станьте питоном фрилансером и закажите свою книгу Оставляя крысиную гонку с Python На Amazon ( Kindle/Print )!

Как исправить ошибку отступа на все времена?

Источник ошибки часто является неправильным использованием вкладок и пробеловных символов. Во многих редакторах кода вы можете установить символ вкладки на фиксированное количество символов пробела. Таким образом, вы, по сути никогда не используете сам табличный символ. Например, если у вас есть Sublime Text Editor, следующее быстрое руководство гарантирует, что вы никогда не будете работать в этой ошибке:

  • Установить Возвышенный текст Использовать вкладки для отступа: Вид -> Отступ -> Преобразовать вдавшиеся вкладки
  • Снимите флажок Опция Отступ с использованием пробелов в том же подменю выше.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Понравилась статья? Поделить с друзьями:
  • Ubuntu проверка системы на ошибки и исправление
  • Ubuntu проверка системного диска на ошибки
  • Ubuntu проверка памяти на ошибки
  • Udl2 блок управления коды ошибок
  • Unexpected error opening catalog lightroom ошибка