Выяснить, что означают сообщения об ошибках 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])

    Правильный вариант:

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

    for i in range(len(spam)):

       print(spam[i])

    Вам может понадобиться только 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])

    В приведенном массиве всего три элемента, а на печать вызывается элемент с индексом 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

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

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

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

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

    spam = 0

    spam++

    Правильный вариант:

    spam = 0

    spam += 1

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

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

    class Foo():

    def myMethod():

           print('Hello!')

    a = Foo()

    a.myMethod()

    Правильно будет так:

    class Foo():

       def myMethod(self):

           print('Hello!')

    a = Foo()

    a.myMethod()

Полезные ссылки по изучению Python:

  • Краткое объяснение различных сообщений об ошибках и исключениях приведено здесь и здесь

  • Сайт для начинающих изучать Python — pythonworld. Здесь можно найти интересные и полезные статьи, а также отличный самоучитель и книги по программированию на языке Python.

  • Получить фундаментальные знания и навыки можно на магистерской программе «Разработка программного обеспечения» от МИФИ и Skillfactory. Выполнить первые проекты на Python помогут эксперты МИФИ и практики из VK, Huawei, Delivery Club.

Комментарии (0)