Як видати помилку в Python




Як видати помилку в Python



Винятки та їх обробка у Python. Оператор try-except

У будь-якій, особливо великій, програмі можуть виникати помилки, що призводять до її непрацездатності або до того, що програма робить не те, що повинна. Причин виникнення помилок багато.

Програміст може зробити помилку у вживанні самої мови програмування. Інакше кажучи, висловитися оскільки висловлюватися годиться. Наприклад, почати ім'я змінної з цифри або забути поставити двокрапку в заголовку складної інструкції. Подібні помилки називають синтаксичними, вони порушують синтаксис та пунктуацію мови. Інтерпретатор Пітона, зустрівши помилкове вираження, не знає, як його інтерпретувати. Тому зупиняє виконання програми та виводить відповідне повідомлення, вказавши на місце виникнення помилки:

>>>
1a
=
10 File  "", line  1
1a
=
10
^
SyntaxError: invalid syntax

У термінології мови Python тут виник виняток, що належить класу SyntaxError. Згідно з документацією Python синтаксичні помилки все-таки прийнято відносити до помилок, а решта – до винятків. У деяких мовах програмування не використовується слово "виключення", а помилки ділять на синтаксичні та семантичні. Порушення семантики зазвичай означає, що, хоча висловлювання написані правильно з погляду синтаксису мови, програма працює так, як від неї очікувалося. Для порівняння. Ви можете грамотною російською мовою сказати кілька пропозицій, але за змістом це буде біліберда, або вас зрозуміють не так, як ви думали.

У Python не говорять про семантичні помилки, говорять про винятках. Їх безліч. У цьому уроці ми розглянемо деякі з них, надалі зустрінемося ще з декількома.

Якщо ви спробуєте звернутися до змінної, якій не було надано значення, що у випадку Python означає, що змінна взагалі не була оголошена, вона не існує, то виникне виняток NameError .

>>>
a
=
0
>>>
print(a
+
b)
Traceback (most recent call last): File  "", line  1, in  NameError: name 'b' is not defined

Останній рядок повідомлення можна перекласти як "Помилка імені: ім'я 'b' не визначене".

Якщо виняток виникає при виконанні коду з файлу, замість line 1 буде вказано рядок, в якому воно виникло, наприклад, line 24 . Натомість буде вказано ім'я файлу, наприклад, test.py . У цьому випадку stdin позначає стандартний потік введення. За промовчанням це потік введення з клавіатури. Рядок 1 - оскільки в інтерактивному режимі кожне вираження інтерпретується окремо, як відокремлена програма. Якщо написати вираз, що складається з кількох рядків, то лінія виникнення помилки може бути іншою:

>>>
a
=
0
>>>
if
a
==
0:
.
print(a)
.
print(a
+
b)
.
0
Traceback (most recent call last): File  "", line  3, in  NameError: name 'b' is not defined

Наступні два винятки, про які слід згадати, і з якими ви вже могли зустрітись у попередніх уроках, це ValueError та TypeError – помилка значення та помилка типу.

>>>
int("Hi")
Traceback (most recent call last): File  "", line  1, in  ValueError: invalid literal for int() with base 10: 'Hi'
>>>
>>>
8
+
"3"
Traceback (most recent call last): File  "", line  1, in  TypeError: unsupported operand type(s) for +: 'int' and 'str'

У прикладі рядок "Hi" не можна перетворити до цілого числа. Виникає виняток ValueError , тому що функція int() не може перетворити таке значення.

Число 8 та рядок "3" належать різним типам, операнд складання між якими не підтримується. При спробі їх скласти виникає виняток TypeError.

Поділ на нуль викликає виняток ZeroDivisionError:

>>>
1/0
Traceback (most recent call last): File  "", line  1, in  ZeroDivisionError: division by zero

Обробка винятків. Оператор try-except

Коли помилки фіксуються у процесі написання програми, програміст змушений виправити код так, щоб їх не було.Однак виняткові ситуації можуть виникати при використанні програми. Наприклад, очікується введення числа, але людина вводить букву. Спроба перетворити її до числа призведе до порушення винятку ValueError , і програма аварійно завершиться.

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

У Пітоні таке перехоплення виконує оператор try-except. "Try" перекладається як "спробувати", "except" - як виняток. Словами описати його роботу можна так: "Спробувати зробити це. Якщо при цьому виник виняток, то зробити щось інше." Його конструкція (але не логіка роботи) схожа на умовний оператор із гілкою else. Розглянемо приклад:

n
=
input("Введіть ціле число:")
try:
n
=
int(n)
print("Вдало")
except:
print("Щось пішло не так")

Виняткова ситуація може виникнути в третьому рядку коду, коли значення змінної n перетворюється на ціле число. Якщо це неможливо, то подальше виконання виразів у тілі try припиняється. В даному випадку вираз print("Вдало") виконано не буде. При цьому потік виконання програми перейде на гілку except та виконає її тіло.

Якщо в тілі try виняток не виникає, то тіло гілки except не виконується.

Ось приклад виведення програми, коли користувач вводить ціле число:

Введіть ціле число: 100
Вдало

А тут – коли вводить не те, що очікувалося:

Введіть ціле число: AA
Щось пішло не так

Є одна проблема. Код вище обробить будь-який виняток. Однак у тілі try можуть виникати різні винятки, і у кожного з них має бути свій обробник. Тому більш правильною є вказівка ​​типу виключення після ключового слова except.

try:
n
=
input("Введіть ціле число:")
n
=
int(n)
print("Все нормально. Ви ввели число",
n)
except
ValueError:
print("Ви ввели не ціле число")

Тепер якщо спрацює тіло except, ми точно знаємо, через що виникла помилка. Але якщо в тілі try виникне ще якийсь виняток, то воно не буде оброблено. Для нього треба написати окрему гілку except. Розглянемо програму:

try:
a
=
float(input("Введіть ділене:"))
b
=
float(input("Введіть дільник:"))
c
=
a
/
b
print("Приватне:
%.2f"
%
c)
except
ValueError:
print("Не можна вводити рядки")
except
ZeroDivisionError:
print("Не можна ділити на нуль")

При її виконанні винятки можуть виникнути в трьох рядках коду: де відбувається перетворення введених значень до речових чисел і в місці де відбувається розподіл. У першому випадку може виникнути ValueError, у другому - ZeroDivisionError. Кожен тип виключення обробляється своєю гілкою except.

Декілька винятків можна згрупувати в одну гілку і обробити спільно:

try:
a
=
float(input("Введіть ділене:"))
b
=
float(input("Введіть дільник:"))
c
=
a
/
b
print("Приватне:
%.2f"
%
c)
except
(ValueError,
ZeroDivisionError):
print("Не можна вводити рядки або ділити на нуль")

У оператора обробки винятків, крім except, можуть бути ще гілки finally і else (не обов'язково обидві відразу). Тіло finally виконується завжди, незалежно від того, чи виконувались блоки except у відповідь на винятки, що виникли, чи ні. Тіло else спрацює, якщо винятків у try не булотобто не було переходів на блоки except.

try:
n
=
input("Введіть ціле число:")
n
=
int(n)
except
ValueError:
print("Неправильне введення")
else:
# виконується, коли у блоці try не виникло винятків
print("Все нормально. Ви ввели число",
n)
finally:
# виконується у будь-якому випадку
print("Кінець програми")

Примітка. У цьому коді використовуються коментарі.У мові Python перед ними ставиться решітка # . Коментарі в програмному коді пишуться виключно для людини та ігноруються інтерпретатором чи компілятором.

Подивіться, як виконується програма у разі виключення і без цього:

Введіть число: 4.3
Неправильне введення
Кінець програми
Введіть ціле число: 4
Все гаразд. Ви ввели число 4
Кінець програми

У цьому уроці викладено в повному обсязі особливості обробки винятків. Так у більших програмах, що містять кілька рівнів вкладеності коду, функції, модулі та класи, винятки можуть оброблятися не за місцем їх виникнення, а передаватися далі за ієрархією викликів.

Також виняток може виникнути в блоці except, else або finally, і тоді їм потрібен власний оброблювач. Модифікуємо трохи попередню програму і спеціально згенеруємо виняток у тілі except:

try:
n
=
input("Введіть ціле число:")
n
=
int(n)
except
ValueError:
print("Неправильне введення")
3
/
0
except
ZeroDivisionError:
print("Поділ на нуль")
else:
print("Все нормально. Ви ввели число",
n)
finally:
print("Кінець програми")

Спочатку може здатись, що все нормально. Виняток, що викидається виразом 3/0, буде оброблено гілкою except ZeroDivisionError . Однак, це не так. Ця гілка обробляє лише винятки, що у блоці try , якого вона сама належить. Ось висновок програми, якщо ввести не ціле число:

Введіть ціле число: а
Неправильне введення
Кінець програми
Traceback (most recent call last): File  "test.py", line  15, in  n
=
int(n)
ValueError: invalid literal for int() with base 10: 'а'
Протягом мандрівки про те, що випливає, інші випадки трапляються:
Traceback (most recent call last): File  "test.py", line  6, in  3
/
0
ZeroDivisionError: division by zero

Мало того, що не було оброблено поділ на нуль, оскільки тіло except ValueError невдало завершилося, саме виняток ValueError вважалося необробленим. Вирішення проблеми може бути, наприклад, таким:

.
except
ValueError:
print("Неправильне введення")
try:
3
/
0
except
ZeroDivisionError:
print("Поділ на нуль")
.

Тут у тіло except вкладено свій внутрішній обробник винятків.

Наприкінці зазначимо, що у програмах, мають практичного значення, обов'язок передбачити можливість виникнення виняткових ситуацій і створювати код обробки лежить на програмісті. Тестувальник також повинен розуміти, у яких випадках можуть виникати винятки. Його завдання – написати код, який перевіряє роботу програми у різних ситуаціях, зокрема крайніх.

Практична робота

Напишіть програму, яка вимагає введення двох значень. Якщо хоча б одне з них не є числом, то має виконуватися конкатенація, тобто з'єднання, рядки. В інших випадках введені числа підсумовуються.

Приклади виконання програми:

Перше значення: 4
Друге значення: 5
Результат: 9.0
Перше значення: a
Друге значення: 9
Результат: a9

Приклади рішення та додаткові уроки у pdf-версії курсу

Python. Введення у програмування

10 поширених типів помилок у Python, і як їх виправити

Будучи програмістом, під час розробки програмного забезпечення ви неминуче зіштовхнетеся з помилками. Це може бути будь-що – від логічних помилок, які можуть призвести до найнесподіваніших результатів, та помилок, які виникають у випадку, якщо ви нехтуєте правилами мови програмування, до помилок, які виникають при виконанні програми. Такі помилки зазвичай називають багами.

Баги - всюдисущі, вони є в кожній мові програмування, і зовсім неважливо, наскільки мова проста у вивченні та застосуванні.

Наприклад, якщо ми говоримо про Python, то ця мова наголошує на зручності в читанні, дотримується виразного синтаксису, і його вважають досить простою з точки зору вивчення та застосування в порівнянні з іншими мовами програмування. Однак це зовсім не означає, що ви застраховані від помилок під час програмування на Python.

Оскільки помилки – це невід'ємна частина роботи програмістів, було б непогано дізнатися у тому, які є типи помилок і чому вони виникають, щоб розуміти, що з нею робити. Таким чином ви можете уникнути помилок при програмуванні (або хоча б звести їх до мінімуму). Крім того, ви дізнаєтеся, як можна усунути ці помилки, коли вони виникають.

Ось деякі поширені помилки в Python, з якими ви можете зіткнутися під час програмування цією мовою.

1. SyntaxError (синтаксична помилка)

Синтаксична помилка – це помилка, що виникає під час написання коду, який порушує правила використовуваної вами мови програмування. У результаті в коді з'являється неприпустимий рядок.

Так, наприклад, у Python, коли ви виводите рядок, ви повинні укладати її в лапки. Якщо цього не зробити, ви отримаєте синтаксичну помилку.

Крім того, синтаксична помилка може виникнути тоді, коли ви пропустили круглі, квадратні або фігурні дужки, що відкривають або закривають, коли ви допустили помилку в ключових словах або іменах функцій, коли ви пропустили двокрапку в кінці оператора управління потоком даних або обов'язкові оператори у виразах.

В основному, синтаксичні помилки виникають, коли ви порушуєте правила написання коду на Python.

## syntax error arising from missing quotation mark ## around the string being printed < ## синтаксична помилка виникає через відсутність ## лапок у рядка, який ми збираємося друкувати >print("Hello World) age = 20 ## Syntax error arising from missing colon in an if statement < ## Синтаксична помилка виникає через відсутності двокрапки в операторі if >if age > 18 print("Age is over 18") ## Syntax error because '(' was never closed < ## Синтаксична помилка через незакриті круглі дужки >def square(x: return x * x print(square(4))

Після того, як ви виконаєте код, наведений вище, ви побачите таке повідомлення про помилку:

Повідомлення про помилку при запуску цього коду буде виглядати так:

File "/home/madici/Desktop/helloworld.py", line 1 print("Hello World) ^ SyntaxError: unterminated string literal (detected at line 1)

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

print("Hello World") age = 20 if age > 18: print("Age is over 18") def square(x): return x * x print(square(4))

2. IndentationError (помилка відступу)

Щоб розділити блоки коду, такі мови, як Java, C і C++, використовують фігурні дужки. А ось Python для визначення ієрархії та структури блоків коду використовує відступи. Наприклад, коли ви пишете оператор керування Java, весь код, який повинен бути виконаний при виконанні умови, укладений у фігурні дужки.

Але якщо ми говоримо про Python, то блок коду буде позначений за допомогою відступів. Стандартний відступ Python – це чотири пробіли або один символ табуляції. Втім, кількість прогалин не має значення, якщо вона залишається постійною протягом усього коду.

Якщо ви програміст, і працюєте з Python, то, швидше за все, ви зіткнетеся з помилками відступу.Наприклад, це може статися, коли ви забудете додати необхідний відступ (наприклад, при написанні операторів управління або функцій), коли для створення відступів ви використовуєте і символ табуляції, і пробіли (це збиває з пантелику інтерпретатор), коли ви ставите відступи там, де не потрібно, або коли ви використовуєте у своїй кодовій базі різні відступи.

Нижче наведено приклад, при запуску якого ви отримаєте помилку відступу:

age = 20 if age > 18: print("Age is greater than 18") print("You're allowed to drive") else: print("Age is less than 18")

Повідомлення про помилки показані нижче:

Повідомлення про помилку при запуску цього коду буде виглядати так:

File "/home/madici/Desktop/helloworld.py", line 3 print("Age is greater than 18") ^ IndentationError: зафіксований indended block after 'if' statement on line 2

Для того, щоб виправити цю помилку, додайте відступ у рядку, що йде після оператора if (оскільки він там потрібен), і переконайтеся в тому, що всі відступи у вашому коді однакові:

age = 20 if age > 18: print("Age is greater than 18") print("You're allowed to drive") else: print("Age is less than 18")

3. TypeError (помилка невідповідності типів)

TypeError – це виняток, який виникає, коли ви намагаєтеся виконати операцію, використовуючи при цьому несумісний тип даних. Наприклад, якщо ви спробуєте скласти або об'єднати рядок і ціле число, ви отримаєте помилку невідповідності типів.

Крім того, такі помилки можуть виникати, коли ви використовуєте функції або методи з неправильними типами даних, коли ви намагаєтеся використати нецілочисельний індекс для того, щоб отримати доступ до елементів в деякому списку або чомусь подібному, або коли ви намагаєтеся виконати ітеративний обхід по об'єкту, який не є таким, що ітерується.

Якщо брати в цілому, будь-яка операція, для якої використовується невірний тип даних, видасть помилку TypeError.

Нижче наведено приклади операцій, які можуть видати таку помилку:

# Type Error resulting from concatenating a string an an integer < # Помилка невідповідності типів виникає в результаті об'єднання рядка і цілого числа >age = 25 message = "I am " + age + " years old." list1 = [1, "hello", 5, "world", 18, 2021] #Type errors resulting from wrong usage of builtin in methods < # Помилка невідповідності типів виникає через неправильне використання вбудованих методів >print(sum(list1) ) #TypeError resulting from adding a string and an integer < # Помилка невідповідності типів виникає в результаті складання рядка і цілого числа >num1 = 10 num2 = "16" print(num1 + num2) #TypeError resulting from using a non integer hello", "from", "the", "other", "side"] print(list2["1"])

Повідомлення про помилки показані нижче:

Приклад помилки TypeError, що виникає в результаті запуску коду, наведеного вище:

File "/home/madici/Desktop/helloworld.py", line 3, in message = "I am " + age + " years old." ~~~~~~~~^~~~~ TypeError: can only concatenate str (not "int") to str

Щоб усунути ці помилки, замініть типи даних на коректні або виконайте перетворення типів даних:

age = 25 message = "I am " + str(age) + " years old." list1 = [1, 5, 18, 2021] print(sum(list1)) num1 = 10 num2 = "16" print(num1 + int(num2)) list2 = ["hello", "from", "the", "other", "side"] print(list2[1])

4. AttributeError (помилка доступу до атрибуту)

AttributeError виникає тоді, коли ви намагаєтеся використовувати атрибут, якого об'єкт немає, або коли ви викликаєте метод, якого об'єкт, для якого він викликається, немає. Помилка доступу до атрибуту показує, що атрибута або методу, який ви викликаєте для об'єкта, не існує.

Наприклад, якщо ви викличете метод, призначений для рядкових даних, для цілого числа, то ви отримаєте помилку AttributeError, оскільки для даного типу об'єкта (для якого викликається метод) цей метод не існує.

Розглянемо приклад нижче. Тут ми використовуємо метод capitalize() цілого числа. По суті цей метод використовується для перетворення першої літери рядка у верхній регістр, так що в якості результату ви отримаєте помилку доступу до атрибуту, тому цілих чисел немає методу capitalize() .

# AttributeError arising from calling capitalize() on an int value < # Помилка доступу до атрибуту виникає через виклик методу capitalize() для цілого числа >num = 1445 cap = num.capitalize() print(cap)

Запустивши цей код, ви отримаєте таке повідомлення про помилку:

Повідомлення про помилку доступу до атрибуту, що виникла після запуску коду вище, виглядає так:

File "/home/madici/Desktop/helloworld.py", line 3, in cap = num.capitalize() ^^^^^^^^^^^^^^ AttributeError: 'int' object has no attribute 'capitalize '

Для того, щоб виправити цю помилку, переконайтеся, що метод, який ви намагаєтеся викликати, або атрибут, до якого ви хочете отримати доступ, існує для типу об'єкта, для якого ви його викликаєте. В даному випадку помилку можна виправити, просто викликавши метод capitalize() для рядкового типу даних:

5. ImportError (помилка імпорту)

ImportError виникає тоді, коли ви намагаєтеся імпортувати модуль, який не може бути знайдений або недоступний у вашому середовищі. Цілком можливо, що ви ще не встановили, неправильно вказали шлях до нього або помилилися при написанні назви модуля, який ви хочете встановити.

У помилки імпорту є єдиний підвид - ModuleNotFoundError. Це помилка, яка виникає тоді, коли ви намагаєтеся імпортувати модуль, який не можна знайти.

Наприклад, код, який ми навели нижче, намагається імпортувати бібліотеку аналізу даних pandas.Оскільки цей модуль ще встановлено, код видає помилку.

В результаті ви побачите таке повідомлення про помилку:

File "/home/madici/Desktop/helloworld.py", line 1, в import pandas ModuleNotFoundError: No module named 'pandas'

Для того, щоб виправити цю помилку, переконайтеся в тому, що модулі, які ви намагаєтеся імпортувати, були встановлені.

6. ValueError (помилка використання некоректного значення)

Це виняток, який виникає тоді, коли функція отримує значення правильного типу, але це значення не підходить. Math.sqrt() негативне число, то отримаєте помилку ValueError, так як ця функція призначена для знаходження квадратного кореня числа.

Звичайно, тип значення буде правильним, тобто числовим, але той факт, що значення негативне, робить його невідповідним.

Якщо ви передасте функції int() (яка перетворює рядок у число) рядок, який не є числовим рядковим значенням, то він поверне помилку ValueError. .

Але якщо ви спробуєте передати рядок, який не є числовим рядковим значенням, наприклад, «Hello», то ви отримаєте помилку ValueError.

Нижче наведено приклад коду, який видає помилку ValueError:

# Value error resulting from inappropriate int value in sqrt() < # Помилка використання некоректного значення виникає в результаті спроби передати невідповідне ціле чисельне значення sqrt() >import math num = -64 root = math.sqrt(num) print(root) # Value error resulting from passing a string with no integer # equivalent into int() function < # Помилка використання некоректного значення виникає через передачу # у функцію int() рядка, у якого немає цілого еквівалента >numString = "Hello" num = int(numString) print(num)

Ось помилки, які виникають у результаті запуску цього коду:

В результаті з'явиться таке повідомлення про помилку:

File "/home/madici/Desktop/helloworld.py", line 4, in root = math.sqrt(num) ^^^^^^^^^^^^^^^ ValueError: math domain error

Для того, щоб виправити цю помилку, вам потрібно передати у функцію відповідне значення:

import math num = 64 root = math.sqrt(num) print(root) numString = "5231" num = int(numString) print(num)

7. IOError (помилка введення-виведення)

IOError (помилка вводу/виводу) – це виняток, який виникає у разі збою операції введення або виведення. Це може статися через спробу отримати доступ до файлу, який не існує, для доступу до якого у вас недостатньо прав іди який на даний момент задіяний в інших операціях, або через недостатній обсяг пам'яті на диску вашого пристрою.

Таку помилку можуть видавати такі методи, як open(), read(), write() і close() , які найчастіше використовуються для роботи з файлами.

Давайте розглянемо нижче код, який намагається відкрити неіснуючий файл під назвою «notes.txt». Цей код видасть помилку IOError, яка викликає виняток FileNotFoundError:

При цьому з'явиться таке повідомлення про помилку:

File "/home/madici/Desktop/helloworld.py", line 2, in file1 = open("notes.txt", "r") ^^^^^^^^^^^^^^^^^^ ^^^^ FileNotFoundError: [Errno 2] Немає такого файлу або directory: 'notes.txt'

Для того, щоб уникнути таких ситуацій, все, що від вас вимагається, це переконатися, що файл «notes.txt» існує в тому каталозі, в якому ви запускаєте термінал. Є ще один спосіб, як виправити помилку IOError. Для цього вам знадобиться блок try-except :

8. NameError (помилка неіснуючого імені)

NameError – це виняток, який виникає, коли ви намагаєтеся використовувати змінну, функцію або модуль, які не існують, які не визначені в поточній області видимості або які не мають значень.

Як правило, така помилка виникає тоді, коли ви робите помилки в іменах змінних або функцій або коли використовуєте їх до того, як вони будуть визначені. Якщо ви намагатиметеся використовувати модуль, не імпортувавши його, ви також отримаєте помилку NamError.

Код нижче призведе до виключення NameError:

# name error arises because the math module has not been imported < # помилка неіснуючого імені виникає через те, що ви не імпортували модуль math >num = 64 root = math.sqrt(64) print(root) # NameError arises because x is used before it is defined < # помилка неіснуючого імені виникає через те, що змінна x використовується до того, як було визначено >y = 23 print(x) #NameEror because function name is not defined < # помилка неіснуючого імені виникає через невизначене ім'я функції >def greet(): print("Good morning") great () #ameError: name 'great' is not defined

І ви отримаєте такі повідомлення про помилки:

Приблизно так виглядає повідомлення про помилку NameError:

File "/home/madici/Desktop/helloworld.py", line 3, in root = math.sqrt(64) ^^^^ NameError: name 'math' is not defined

Для того, щоб виправити помилку NameError, переконайтеся, що ви імпортували модулі, які використовуєте, що ви не використовуєте змінні або функції до того, як їх було визначено, і не наробили помилок в іменах функцій і змінних:

import math num = 64 root = math.sqrt(64) print(root) y = 23 print(y) def greet(): print("Good morning") greet()

9. IndexError (помилка неіснуючого індексу)

IndexError – це виняток, який виникає в тому випадку, якщо ви намагаєтеся отримати доступ до елемента списку або кортежу за допомогою індексу, що знаходиться поза діапазоном. Давайте подивимося на наступний список:

У цьому списку є п'ять елементів. У Python індекси починаються з нуля. Отже, список, наведений вище, має такі індекси: 0, …, n-1, де n – це кількість елементів у списку. У разі індекси змінюються від 0 до 4.

Якщо ви спробуєте отримати доступ до елемента, чий індекс більше 4, то ви побачите помилку IndexError, оскільки цей індекс знаходиться поза діапазоном списку, в якому знаходиться елемент, до якого ви хочете отримати доступ. Нижче наведено код, який видасть помилку IndexError:

list1 = [1, 2, 3, 4, 5] item = list1[6] #IndexError because the index list is out of range < # помилка неіснуючого індексу виникає через те, що індекс знаходиться поза діапазоном списку >print(item )

Ось так виглядатиме ця помилка:

Ось так буде виглядати повідомлення про помилку IndexError:

File "/home/madici/Desktop/helloworld.py", line 2, in item = list1[6] #IndexError because the list index is out of range ~~~~~^^^

Щоб уникнути таких помилок, найкраще використовувати функції range() і len() . Таким чином, ви зможете переконатися в тому, що елементи, до яких ви хочете отримати доступ, знаходяться в межах діапазону списку:

list1 = [1, 2, 3, 4, 5] for i in range(len(list1)): print(list1[i])

10. KeyError (помилка відсутнього ключа)

KeyError – це виняток, який виникає тоді, коли ви намагаєтеся отримати доступ до елемента словника за допомогою ключа, якого у словнику немає. Давайте подивимося на наступний словник:

Тут ключі - це Canada, USA, Italy.За допомогою цих трьох ключів можна отримати доступ до елементів зі словника, в якому зберігаються міста. Але якщо ви спробуєте отримати доступ до елемента за допомогою якогось неіснуючого ключа, наприклад, Brazil, то отримаєте помилку KeyError:

Ось так буде виглядати повідомлення про помилку KeyError:

File "/home/madici/Desktop/helloworld.py", line 6, in print(cities["Brazil"]) ~~~~~~^^^^^^^^^^^ KeyError: 'Brazil'

Для того, щоб таких помилок не було, переконайтеся, що ключі, які ви використовуєте для доступу до елементів словника дійсно існують в рамках цього словника. Для цього ви можете скористатись оператором if…else:

cities = country = "Canada" if country in cities: print("The capital city of + country + "is" + cities[country]) else: print("The key" + country + " is not present in the cities dictionary")

При такому підході ви зможете уникнути помилок KeyError при спробі отримати доступ до елементів словника.

Висновок

Коли ви пишете програми на Python, немає значення, який рівень ваших знань, ви обов'язково зіткнетеся з помилками. Саме тому дуже важливо ознайомитися з різними типами помилок, які ми продемонстрували у цій статті. Тоді ви будете впевнені, що зможете виправити їх, коли вони виникнуть.

Схожі статті

  • Як усунути синтаксичну помилку в Python
  • Як виправити помилку принтера Canon 5105
  • Як прибрати помилку F2
  • Як виправити помилку 0xc00007b у pes 17
  • Як виправити помилку з драйверами
  • Як видати собі у майнкрафті блок світла
  • Як виправити помилку E110 на казані
  • Як виправити помилку 601 внутрішньої батареї
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x