|
Під час вивчення Python може бути трохи складно зрозуміти значення повідомлень про помилки Python. Ось список деяких поширених помилок під час виконання, які спричиняють збій вашої програми.
1) Забув додати :( наприкінці if, elif, else, for, while, class, def. Помилка виникає у такому коді: якщо спам == 42 print("Привіт!") 2) Використовувати = замість == (що призводить до «SyntaxError: некоректний синтаксис») = — оператор присвоєння, а == дорівнює операції порівняння.Помилка виникає в коді так: якщо спам = 42: print("Привіт!") 3) Неправильне використання вм'яття. (У результаті з'являються "IndentationError:unexpected indent", "IndentationError:unindent не відповідає жодному зовнішньому рівню індетації" та "IndentationError:очікуваний відступний блок") Пам'ятайте, що відступ використовується лише після операторів, що закінчуються на: після чого формат відступу потрібно повернути до попереднього формату відступу. Помилка виникає в коді так: print("Привіт!") друк ("Привіт!") Або: якщо спам == 42: print("Привіт!") друк ("Привіт!") Або: якщо спам == 42: print("Привіт!") 4) Забуття викликати len() у операторі for loop (що призводить до того, що об'єкт "list" не може бути інтерпретований як ціле число) Зазвичай потрібно ітерувати список або рядковий елемент через індекс, що вимагає виклику функції range(). Не забувайте повертати значення len замість повернення цього списку. Помилка виникає в коді так: spam = ["кіт", "собака", "миша"] для i в радіусі дії (спам): друк (спам) 5) Спробуйте змінити значення рядка (що призводить до появи "TypeError: об'єкт "str" не підтримує призначення елемента) String — це незмінний тип даних, і помилка виникає у такому коді: spam = «У мене є домашній кіт.» spam[13] = "r" друк (спам) І ти справді хочеш це зробити: spam = «У мене є домашній кіт.» spam = spam[:13] + "r" + spam[14:] друк (спам) 6) Спроба конкатенувати не-рядкові значення зі рядками (що призводить до «TypeError: Can't convert object "int" у str implicly) Помилка виникає в коді так: numEggs = 12 print ("У мене є " + numEggs + " eggs.") І ти справді хочеш це зробити: numEggs = 12 print("У мене є " + str(numEggs) + "eggs.") Або: numEggs = 12 print("У мене є %s яєць." % (numEggs)) 7) Забуття ставити лапки на початку і в кінці рядка (що призводить до «SyntaxError: EOL при скануванні літералу рядка») Помилка виникає в коді так:
print(Привіт!») Або: друк («Привіт!) Або: myName = «Ел» print("Моє ім'я " + моє ім'я + . Як ти?») 8) Неправильне написання імен змінних або функцій (що призводить до «NameError: name "fooba" не визначено") Помилка виникає в коді так: foobar = «Ал» друк ("Мене звати " + fooba) Або: спам = руонд(4.2) Або: спам = Раунд(4.2) 9) Помилка в написанні імен методів (що призводить до «AttributeError: об'єкт «str» не має атрибута «lowerr») Помилка виникає в коді так: spam = «ЦЕ НАПИСАНО МАЛОЮ ЛІТЕРОЮ.» spam = spam.lowerr() 10) Посилання перевищують максимальний індекс списку (що призводить до «IndexError: list index out of range») Помилка виникає в коді так: spam = ["кіт", "собака", "миша"] друкувати(спам[6]) 11) Використання значення ключа словника, якого не існує (що призводить до «KeyError: 'spam'») Помилка виникає в коді так: spam = {"кіт": "Зофі", "собака": "Базилік", "миша": "Вуса"} print("Ім'я моєї домашньої зебри " + spam["zebra"]) 12) Спроба використати ключове слово Python як назву змінної (що призводить до «SyntaxError: некоректний синтаксис») Python-ключ не може використовуватися як ім'я змінної, помилка виникає у такому коді: клас = «алгебра» Ключові слова Python3: and, as, assert, break, class, continue, def, del, elif, else, except, False, нарешті, for, from, global, if, import, in, lambda, None, nonlocal, not, or, pass, raise, return, Правда, спробуй, поки з, здавайся
13) Використання операторів доданої вартості у визначеній новій змінній (що призводить до «NameError: name "foobar" не визначено") Не використовуйте 0 або null рядки як початкові значення при оголошенні змінних, щоб спам у реченні += 1 за допомогою оператора самозбільшення був дорівнює spam = spam + 1, тобто спаму потрібно вказати дійсне початкове значення. Помилка виникає в коді так: спам = 0 спам += 42 яйця += 42 14) Використовувати локальні змінні у функціях перед визначенням локальних змінних (у цьому випадку існує глобальна змінна з тією ж назвою, що й локальна змінна) (що призводить до посилання на "UnboundLocalError: local variable "foobar" перед присвоєнням") Використовувати локальну змінну у функції з тією ж назвою, що й глобальна змінна, складно, і правила використання такі: якщо щось визначено у функції, якщо воно використовується лише у функції — воно є локальним, і навпаки. Це означає, що ви не можете використовувати її у функції як глобальну змінну до її визначення. Помилка виникає в коді так: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Спроба створити цілочисельний список з range() (що призводить до «TypeError: об'єкт «range» не підтримує призначення елемента) Іноді хочеться отримати впорядкований список цілих чисел, тому range() здається хорошим способом згенерувати цей список. Однак потрібно пам'ятати, що range() повертає «об'єкт діапазону», а не фактичне значення списку. Помилка виникає в коді так: спам = дальність(10) спам[4] = -1 Можливо, саме це ти хочеш зробити: спам = список(діапазон(10)) спам[4] = -1 (Примітка: spam = range(10) працює в Python 2, оскільки в Python 2 range() повертає значення списку, але в Python 3 генерується наведена вище помилка) 16) Гарно в ++ або — оператор самоінкременту. (Внаслідок цього з'являється «SyntaxError: некоректний синтаксис») Якщо ви звикли до інших мов, таких як C++, Java, PHP тощо, можливо, варто спробувати використовувати ++ або — збільшити та відняти змінну. У Python такого оператора немає. Помилка виникає в коді так: спам = 1 spam++ Можливо, саме це ти хочеш зробити: спам = 1 спам += 1 17) Забув додати параметр себе до першого аргументу методу (в результаті «TypeError: myMethod() не приймає аргументів (1 given)») Помилка виникає в коді так: клас Foo(): def myMethod(): print("Привіт!") a = Foo() a.myMethod()
|