В този урок ще научите за различни видове грешки и изключения, които са вградени в Python. Те се вдигат всеки път, когато интерпретаторът на Python срещне грешки.
Видео: Обработка на изключения на Python
Можем да допуснем определени грешки, докато пишем програма, която води до грешки, когато се опитаме да я стартираме. Програмата на python се прекратява веднага щом срещне необработена грешка. Тези грешки могат да бъдат класифицирани най-общо в два класа:
- Синтаксични грешки
- Логически грешки (Изключения)
Синтаксични грешки на Python
Грешка, причинена от неспазване на правилната структура (синтаксис) на езика, се нарича синтаксисна грешка или грешка при синтактичния анализ .
Нека разгледаме един пример:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Както е показано в примера, стрелка показва къде парсерът е срещнал синтаксичната грешка.
Тук можем да забележим, че :
в if
декларацията липсва дебело черво .
Логически грешки на Python (изключения)
Грешките, които възникват по време на изпълнение (след преминаване на синтаксисния тест), се наричат изключения или логически грешки .
Например, те се появяват, когато се опитваме да отворим файл (за четене), който не съществува ( FileNotFoundError
), опитаме да разделим число на нула ( ZeroDivisionError
) или се опитаме да импортираме модул, който не съществува ( ImportError
).
Винаги, когато възникнат тези видове грешки по време на изпълнение, Python създава обект на изключение. Ако не се обработи правилно, той отпечатва обратна връзка към тази грешка, заедно с някои подробности за това, защо е възникнала тази грешка.
Нека да разгледаме как Python третира тези грешки:
>>> 1 / 0 Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in FileNotFoundError: (Errno 2) No such file or directory: 'imaginary.txt'
Вградени изключения на Python
Незаконните операции могат да създадат изключения. Има много вградени изключения в Python, които се появяват, когато възникнат съответни грешки. Можем да видим всички вградени изключения, използвайки вградената local()
функция, както следва:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
ще върне модул от вградени изключения, функции и атрибути. dir
ни позволява да изброим тези атрибути като низове.
Някои от често срещаните вградени изключения в програмирането на Python заедно с грешките, които ги причиняват, са изброени по-долу:
Изключение | Причина за грешка |
---|---|
AssertionError | Повишава се, когато дадено assert изявление не успее. |
AttributeError | Повишава се, когато присвояването на атрибут или препратката е неуспешно. |
EOFError | Повишава се, когато input() функцията достигне състояние на края на файла. |
FloatingPointError | Повишава се, когато операцията с плаваща запетая не успее. |
GeneratorExit | Повишаване, когато close() се извика метод на генератор . |
ImportError | Повишава се, когато импортираният модул не е намерен. |
IndexError | Повишава се, когато индексът на последователност е извън обхвата. |
KeyError | Повишава се, когато ключ не е намерен в речник. |
KeyboardInterrupt | Повишава се, когато потребителят натисне клавиша за прекъсване ( Ctrl+C или Delete ). |
MemoryError | Повишава се, когато операцията свърши с памет. |
NameError | Повишава се, когато променлива не е намерена в локален или глобален обхват. |
NotImplementedError | Повишено с абстрактни методи. |
OSError | Повишава се, когато работата на системата причинява системна грешка. |
OverflowError | Повишава се, когато резултатът от аритметична операция е твърде голям, за да бъде представен. |
ReferenceError | Повишава се, когато се използва слаб референтен прокси за достъп до референт, събран от боклук. |
RuntimeError | Повишава се, когато грешка не попада в никоя друга категория. |
StopIteration | Повишено от next() функция, за да покаже, че няма допълнителен елемент, който да бъде върнат от итератора. |
SyntaxError | Повишено от парсер, когато се срещне синтаксична грешка. |
IndentationError | Повишен, когато има неправилно отстъп. |
TabError | Повишава се, когато отстъпът се състои от несъвместими раздели и интервали. |
SystemError | Повишава се, когато преводачът открие вътрешна грешка. |
SystemExit | Повишено по sys.exit() функция. |
TypeError | Повишава се, когато функция или операция се прилага към обект от неправилен тип. |
UnboundLocalError | Повишава се, когато се прави препратка към локална променлива във функция или метод, но към тази променлива не е свързана стойност. |
UnicodeError | Повишава се, когато възникне грешка при кодиране или декодиране, свързана с Unicode. |
UnicodeEncodeError | Повишава се, когато по време на кодирането възникне грешка, свързана с Unicode. |
UnicodeDecodeError | Повишава се, когато по време на декодиране възникне грешка, свързана с Unicode. |
UnicodeTranslateError | Повишава се, когато по време на превода възникне грешка, свързана с Unicode. |
ValueError | Повишава се, когато функция получава аргумент от правилен тип, но неправилна стойност. |
ZeroDivisionError | Повишава се, когато вторият операнд на деление или модулна операция е нула. |
Ако е необходимо, можем да дефинираме и собствените си изключения в Python. За да научите повече за тях, посетете Изключения, дефинирани от потребителя на Python.
Можем да се справим тези вградени и потребителски дефинирани изключения в Python, използващи try
, except
и finally
отчети. За да научите повече за тях, посетете Python try, освен и накрая изявления.