Винятки¶
Тут розглядаються кілька вбудованих винятків які будуть часто генеруватися, в тому числі через помилки в коді. Опис винятків спрощено, за повною інформацією та описом звертайтесь до документації.
IndexError¶
KeyError¶
NameError¶
UnboundLocalError¶
FileNotFoundError¶
TypeError¶
Цей виняток генерується, коли операція або функція застосована до об'єкта невідповідного типу.
Наприклад, функція len не працює з типом int:
In [1]: len(100)
--------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[1], line 1
----> 1 len(100)
TypeError: object of type 'int' has no len()
Також функція len очікує тільки один аргумент, а тут передані два:
In [2]: len("hello", "test")
--------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[2], line 1
----> 1 len("hello", "test")
TypeError: len() takes exactly one argument (2 given)
Приклад для операцій:
In [1]: 100 + "test"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[1], line 1
----> 1 100 + "test"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Приклад виконання операції яка не підтримується (file.close це True або False, а їх не можна викликати)
In [3]: file.closed()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[3], line 1
----> 1 file.closed()
TypeError: 'bool' object is not callable
ValueError¶
Генерується, коли операція або функція отримує аргумент, який має правильний тип, але невідповідне значення.
Наприклад, функція int може виконувати конвертацію із рядка в число:
Але якщо передати int рядок, який вона не може конвертувати в десяткове число (за замовчуванням), згенерується виняток ValueError:
In [4]: int("ff")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[4], line 1
----> 1 int("ff")
ValueError: invalid literal for int() with base 10: 'ff'
Із вказанням додаткового параметру, можна вказати, що конвертація буде із шістнадцяткового формату:
AttributeError¶
Генерується, коли код звертається до атрибута, якого немає в об'єкті.
Часто AttributeError генерується, коли очікується, що вираз повертає об'єкт, а він повертає, наприклад, None.
Метод append повертає None, оскільки він змінює сам список vlans, а не створює новий. Але якщо випадково подумати, що він повертає новий список і записати його у змінну result.
Наступна операція зі змінною в якій має бути список, сгенерує виняток AttributeError (через те що в result насправді None):
In [5]: result.append(200)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[5], line 1
----> 1 result.append(200)
AttributeError: 'NoneType' object has no attribute 'append'
In [6]: print(result)
None
TabError¶
Генерується, коли в коді для відступу використовуються і табуляція, і пробіл (мова саме про символи).
Виправити ситуацію можна заміною символу табуляції 4 пробілами.
IndentationError¶
Генерується у випадку виникнення синтаксичних помилок, пов’язаних із неправильним відступом.
Код і відповідна помилка при виконанні (другий print має бути на одному рівні з print або for):
for i in range(10):
print(i)
print(i)
IndentationError: unindent does not match any outer indentation level
Код і відповідна помилка при виконанні (перший print має бути з відступом):
for i in range(10):
print(i)
print(i)
IndentationError: expected an indented block after 'for' statement on line 2
SyntaxError¶
Генерується у випадку виникнення синтаксичних помилок.
В цьому випадку після range(10) не вистачає :