У овом упутству ћете научити о различитим врстама грешака и изузецима који су уграђени у Питхон. Они се подижу кад год Питхон интерпретер наиђе на грешке.
Видео: Руковање изузецима Питхон-а
Приликом писања програма можемо направити одређене грешке када покушавамо да га покренемо. Програм питхон се завршава чим наиђе на необрађену грешку. Ове грешке могу се широко класификовати у две класе:
- Синтаксне грешке
- Логичке грешке (изузеци)
Питхон синтаксне грешке
Грешка настала непридржавањем одговарајуће структуре (синтаксе) језика назива се синтаксна грешка или грешка рашчлањивања .
Погледајмо један пример:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Као што је приказано у примеру, стрелица показује где је парсер наишао на синтаксну грешку.
Овде можемо приметити да :
у if
изјави недостаје дебело црево .
Питхон логичке грешке (изузеци)
Грешке које се јављају током извршавања (након полагања теста синтаксе) називају се изузецима или логичким грешкама .
На пример, јављају се када покушавамо да отворимо датотеку (за читање) која не постоји ( FileNotFoundError
), покушавамо да поделимо број са нулом ( ZeroDivisionError
) или да покушамо да увежемо модул који не постоји ( ImportError
).
Кад год се појаве ове врсте рунтиме грешака, Питхон креира објекат изузетка. Ако се не поступи правилно, исписује повратну грешку до те грешке, заједно са неким детаљима о томе зашто је до те грешке дошло.
Погледајмо како Питхон третира ове грешке:
>>> 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'
Питхон уграђени изузеци
Илегалне операције могу створити изузетке. Пуно је уграђених изузетака у Питхону који се појављују када се појаве одговарајуће грешке. Све уграђене изузетке можемо прегледати помоћу уграђене local()
функције на следећи начин:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
ће вратити модул уграђених изузетака, функција и атрибута. dir
омогућава нам да ове атрибуте наведемо као низове.
У наставку су наведени неки од уобичајених уграђених изузетака у програмирању на Питхону, заједно са грешкама које их узрокују:
Изузетак | Узрок грешке |
---|---|
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 | Повећава се када дође до грешке у кодирању или декодирању повезаном са Уницодеом. |
UnicodeEncodeError | Повећава се када се током кодирања догоди грешка повезана са Уницоде-ом. |
UnicodeDecodeError | Повећава се када се током декодирања догоди грешка повезана са Уницоде-ом. |
UnicodeTranslateError | Повећава се када се током превођења догоди грешка повезана са Уницоде-ом. |
ValueError | Повећава се када функција добије аргумент исправног типа, али неправилне вредности. |
ZeroDivisionError | Повећава се када је други операнд дељења или модуло операција нула. |
Ако је потребно, такође можемо дефинисати сопствене изузетке у Питхону. Да бисте сазнали више о њима, посетите Питхон кориснички дефинисане изузетке.
Ми може да обради ове уграђене и усер-дефинисане изузетке у Питхон помоћу try
, except
и finally
изјаве. Да бисте сазнали више о њима, посетите Питхон три, осим и коначно изјаве.