Баннер мобильный (3) Пройти тест

17 самых распространенных ошибок новичков в Python и как их фиксить

Получили сообщение об ошибке? Давайте разберемся, что это значит

Разбор

2 июля 2024

Поделиться

Скопировано
17 самых распространенных ошибок новичков в Python и как их фиксить

Содержание

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

    SyntaxError: invalid syntax

    Что может скрываться за этим сообщением?

    1. Пропуск “:” после оператора if, elif, else, for, while, class или def. 

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

    if spam == 42
    
       print('Hello!')
    1. Использование = вместо ==.

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

    if spam = 42:
    
       print('Hello!')
    1. Попытка использовать ключевые слова Python в качестве переменной.

    Ключевые слова 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

    1. Нет оператора ++ инкремента или — декремента.

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

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

    spam = 0
    
    spam++
    
    Без ошибки:
    
    spam = 0
    
    spam += 1

    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!')

    TypeError: ‘list’ object cannot be interpreted as an integer 

    Скорее всего, вы забыли вызвать len() в операторе цикла for. Если вы хотите перебирать индексы элементов в списке или строке, это требует вызова функции 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: вместо приведенного выше кода. Но это относится к ситуации, когда нужен индекс в теле цикла, а не только само значение.

    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)

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

    SyntaxError: EOL while scanning string literal 

    Что за ошибка: пропуск кавычки в начале или конце строкового значения.

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

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

    NameError: name ‘fooba’ is not defined

    Что за ошибка: опечатка в переменной или имени функции.

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

    foobar = 'Al'
    
    print('My name is ' + fooba)
    
    … еще:
    
    spam = ruond(4.2)
    
    … еще пример:
    
    spam = Round(4.2)

    AttributeError: ‘str’ object has no attribute ‘lowerr’

    Что за ошибка: опечатка в названии метода.

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

    spam = 'THIS IS IN LOWERCASE.'
    
    spam = spam.lowerr()
    
    IndexError: list index out of range
    
    Что за ошибка: выход за пределы массива.
    
    Пример кода с ошибкой:
    
    spam = ['cat', 'dog', 'mouse']
    
    print(spam[6])

    В приведенном массиве всего три элемента, а на печать вызывается элемент с индексом 6.

    KeyError: ‘spam’

    Что за ошибка: использование несуществующего ключа словаря.

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

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

    NameError: name ‘foobar’ is not defined

    Что за ошибка: использование расширенного оператора присваивания для новой переменной. 

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

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

    spam = 0
    
    spam += 42
    
    eggs += 42

    UnboundLocalError: local variable ‘foobar’ referenced before assignment

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

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

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

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

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

    TypeError: ‘range’ object does not support item assignment

    Что за ошибка: попытка использовать range() для создания списка целых чисел. 

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

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

    spam = range(10)
    
    spam[4] = -1
    
    Правильно будет так:
    
    spam = list(range(10))
    
    spam[4] = -1

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

    TypeError: myMethod() takes no arguments (1 given)

    Возникает, когда вы забыли добавить self в качестве первого параметра для метода. 

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

    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 комментариев
    Комментарии