Error in Python can be of two types i.e. Syntax errors and Exceptions. Errors are the problems in a program due to which the program will stop the execution. On the other hand, exceptions are raised when some internal events occur which changes the normal flow of the program.
The difference between Syntax Error and Exceptions
Syntax Error: As the name suggest this error is caused by wrong syntax in the code. It leads to the termination of the program.
#initialize the amount variable
amount = 10000
# check that You are eligible to
# purchase Dsa Self Paced or not
if(amount>2999)
print("You are eligible to purchase Dsa Self Paced")
Output:

Exceptions: Exceptions are raised when the program is syntactically correct but the code resulted in an error. This error does not stop the execution of the program, however, it changes the normal flow of the program.
#initialize the amount variable
marks = 10000
# perform division with 0
a = marks / 0
print(a)
Output:

In the above example raised the ZeroDivisionError as we are trying to divide a number by 0.
Tiįŗæng Viį»t
Ngoįŗ”i lį» (Exception) trong Python
Ngoįŗ”i lį» (Exception) lĆ lį»i xįŗ£y ra trong quĆ” trƬnh thį»±c thi mį»t chʰʔng trƬnh. Khi nó xįŗ£y ra, Python tįŗ”o ra mį»t exception Äį» xį» lý vįŗ„n Äį» Äó trĆ”nh cho ứng dỄng hay server cį»§a bįŗ”n bį» crash.
Ngoįŗ”i lį» có thį» lĆ bįŗ„t kỳ Äiį»u kiį»n bįŗ„t thʰį»ng nĆ o trong chʰʔng trƬnh phĆ” vį»” luį»ng thį»±c thi chʰʔng trƬnh Äó. Bįŗ„t cứ khi nĆ o mį»t ngoįŗ”i lį» xuįŗ„t hiį»n, chʰʔng trƬnh sįŗ½ ngừng thį»±c thi, chuyį»n qua quĆ” trƬnh gį»i vĆ in ra lį»i Äįŗæn khi nó Äược xį» lý.

XỠlý ngoẔi lỠtrong Python
Trong Python, cĆ”c ngoįŗ”i lį» có thį» Äược xį» lý bįŗ±ng khį»i lį»nhĀ try…except. NghÄ©a lĆ mƬnh nói vį»i mĆ”y tĆnh lĆ chįŗ”y Äoįŗ”n code nĆ y Äi (try)m trừ phi(except) Äiį»u nĆ y xįŗ£y ra.
Phįŗ§n thĆ¢n cį»§a try sįŗ½ gį»m code có thį» tįŗ”o ra exception, nįŗæu mį»t exception Äược tįŗ”o ra, tįŗ„t cįŗ£ cĆ¢u lį»nh trong khį»i sįŗ½ bį» bį» qua.
Mįŗ·t khĆ”c, phįŗ§n thĆ¢n cį»§aĀ exceptĀ Äược gį»i bį»i exception handler, vƬ nó Äược dùng Äį» bįŗÆt lį»i. Khį»iĀ exceptĀ sįŗ½ thį»±c hiį»n khi lį»i Äược tįŗ”o ra, khĆ“ng thƬ sįŗ½ Äược bį» qua. Bįŗ”n có thį» dùng exception có sįŗµn trong Thʰ viį»n chuįŗ©n Python.
Và dỄ:
# import module sys Äį» gį»i ra cĆ”c ngoįŗ”i lį»
import sys
randomList = ['a', 0, 2]
for nhap in randomList:
try:
print("Phįŗ§n tį»:", nhap)
r = 1/int(nhap)
break
except:
print("Có ngoẔi lỠ",sys.exc_info()[0]," xảy ra.")
print("Nhįŗp phįŗ§n tį» tiįŗæp theo")
print()
print("Kįŗæt quįŗ£ vį»i phįŗ§n tį»",nhap,"lĆ :",r)
Kįŗæt quįŗ£ Äʰa ra mĆ n hƬnh nhʰ sau:
Phįŗ§n tį»: a
Có ngoẔi lỠ<class 'ValueError'> xảy ra.
Nhįŗp phįŗ§n tį» tiįŗæp theo
Phįŗ§n tį»: 0
Có ngoẔi lỠ<class 'ZeroDivisionError'> xảy ra.
Nhįŗp phįŗ§n tį» tiįŗæp theo
Phįŗ§n tį»: 2
Kįŗæt quįŗ£ vį»i phįŗ§n tį» 2 lĆ : 0.5
į» vĆ dỄ nĆ y, chʰʔng trƬnh sįŗ½ thį»±c thi Äįŗæn khi có chĆnh xĆ”c sį» Äược nhįŗp lĆ sį» nguyĆŖn.
Nįŗæu khĆ“ng có ngoįŗ”i lį» xįŗ£y ra, khį»i except sįŗ½ Äược bį» qua vĆ chʰʔng trƬnh theo luį»ng bƬnh thʰį»ng, nhʰng nįŗæu có bįŗ„t cứ ngoįŗ”i lį» nĆ o nó sįŗ½ bį» chįŗ·n lįŗ”i bį»i except.
Chʰʔng trƬnh cÅ©ng in tĆŖn cį»§a exception bįŗ±ng hĆ mĀ ex_info()Ā bĆŖn trong moduleĀ sys,Ā kįŗæt quįŗ£ trįŗ£ vį» lĆ giĆ” trį» āaā gĆ¢y raĀ ValueErrorĀ vĆ 0 gĆ¢y raĀ ZeroDivisionError.
Nįŗæu bįŗ”n khĆ“ng dùng except, thƬ nįŗæu bįŗ”n nhįŗp giĆ” trį» “a”, hoįŗ·c sį» “0”. Chʰʔng trƬnh sįŗ½ dừng lįŗ”i vĆ bĆ”o lį»i, nhʰng nįŗæu dùng “try..except”, thƬ chʰʔng trinh cį»§a bįŗ”n sįŗ½ tiįŗæp tỄc chįŗ”y vĆ những trʰį»ng hợp lį»i sįŗ½ Äược thĆ“ng bĆ”o. Äiį»u nĆ y giį»ng nhʰ lĆ khi nhįŗp password sai Äược phĆ©p nhįŗp lįŗ”i vįŗy, nįŗæu khĆ“ng dùng try except thƬ mĆ”y tĆnh bįŗ”n treo luĆ“n ngay khi bįŗ”n nhįŗp giĆ” trį» sai.
Xį» lý cỄ thį» mį»t ngoįŗ”i lį»
į» vĆ dỄ trĆŖn, khĆ“ng có mį»t ngoįŗ”i lį» cỄ thį» nĆ o Äược Äį» cįŗp Äįŗæn trong mį»nh Äį» except nĆŖn khi chʰʔng trƬnh gįŗ·p ngoįŗ”i lį» (dù lĆ bįŗ„t kƬ exception nĆ o) thƬ chĆŗng Äį»u Äược xį» lý theo mį»t cĆ”ch.
NgoĆ i cĆ”ch Äó ra, ta có thį» chį» Äį»nh cĆ”c ngoįŗ”i lį» cỄ thį» cho khį»i lį»nh except.
Cú phÔp như sau:
try:
# khį»i code lį»nh try
except exceptionName:
# khį»i code lį»nh except
Tham sį»:
- exceptionName lĆ tĆŖn cį»§a cĆ”c exception bįŗ”n nghÄ© có khįŗ£ nÄng xįŗ£y ra.
Mį»t mį»nh Äį» try có thį» có nhiį»u mį»nh Äį» except Äį» xį» lý chĆŗng khĆ”c nhau.
Nįŗæu khį»i lį»nh trong try có 1 lį»i gƬ Äó xįŗ£y ra thƬ chʰʔng trƬnh sįŗ½ tƬm Äįŗæn cĆ”c except phĆa dʰį»i, except nĆ o thį»a mĆ£n thƬ nó sįŗ½ thį»±c thi code trong khį»i except Äó.
try :
# khį»i code lį»nh try
except ValueError:
# code xỠlý ValueError
except RuntimeError:
# code xỠlý RuntimeError
Bįŗ”n cÅ©ng có thį» bįŗÆt nhiį»u exception trĆŖn mį»t lįŗ§n khai bĆ”o except bįŗ±ng viį»c Äįŗ·t cĆ”c ngoįŗ”i lį» cĆ”ch nhau bį»i mį»t dįŗ„u phįŗ©y ā,ā
try :
# khį»i code lį»nh try
except (TypeError, ZeroDivisionError):
# code xį» lý nhiį»u ngoįŗ”i lį»
# TypeError, ZeroDivisionError
XĆ¢y dį»±ng mį»t Exception
XĆ¢y dį»±ng mį»t exception bįŗ±ng cĆ”ch sį» dỄng raise lĆ mį»t cĆ”ch khĆ”c Äį» xį» lĆ ngoįŗ”i lį» trong Python. Trong trʰį»ng hợp nĆ y, bįŗ”n có thį» tįŗ”o exception cį»§a riĆŖng mƬnh – Äó lĆ exception Äược nĆŖu ra khi vįŗ„n Äį» nįŗ±m bĆŖn ngoĆ i phįŗ”m vi cį»§a dį»± kiįŗæn lį»i xįŗ£y ra.
Và dỄ:
try:
x = input('Nhįŗp mį»t sį» trong khoįŗ£ng 1-10: ')
if x<1 or x>10:
raise Exception
print 'Bįŗ”n vừa nhįŗp mį»t sį» hợp lį» :D'
except:
print 'Sį» bįŗ”n vừa nhįŗp nįŗ±m ngoĆ i khoįŗ£ng cho phĆ©p mįŗ„t rį»i!'
Trong vĆ dỄ nĆ y, nįŗæu bįŗ”n nhįŗp mį»t sį» bĆŖn ngoĆ i cĆ”c phįŗ”m vi cho phĆ©p, cĆ”c lį»nh print trong cĆ”c except block sįŗ½ Äược thį»±c hiį»n.
Module traceback
Module traceback lĆ cĆ”ch khĆ”c Äį» xį» lĆ exception trong Python. Vį» cĘ” bįŗ£n nó Äược sį» dỄng Äį» in ra dįŗ„u vįŗæt cį»§a chʰʔng trƬnh sau khi exception xįŗ£y ra.
Traceback bao gį»m thĆ“ng bĆ”o lį»i, sį» dòng gĆ¢y ra lį»i vĆ call stack cį»§a hĆ m gĆ¢y ra lį»i.
>>> raise KeyboardInterrupt
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
raise KeyboardInterrupt
KeyboardInterrupt
>>> raise MemoryError("ÄĆ¢y lĆ mį»t tham sį».")
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
raise MemoryError("ÄĆ¢y lĆ mį»t tham sį».")
MemoryError: ÄĆ¢y lĆ mį»t tham sį».
>>> try:
... a = int(input("Nhįŗp mį»t sį» nguyĆŖn dʰʔng: "))
... if a <= 0:
... raise ValueError("Sį» bįŗ”n vừa nhįŗp khĆ“ng phįŗ£i sį» nguyĆŖn dʰʔng.")
... except ValueError as ve:
... print(ve)
...
Nhįŗp mį»t sį» nguyĆŖn dʰʔng: -2
Sį» bįŗ”n vừa nhįŗp khĆ“ng phįŗ£i sį» nguyĆŖn dʰʔng.
Try…Finally
Try…finally lĆ mį»t cĆ”ch khĆ”c Äį» viįŗæt lį»nh try trong Python.
Finally còn Äược gį»i lĆ mį»nh Äį» clean-up/termination vƬ nó luĆ“n luĆ“n chįŗ”y bįŗ„t kį» có lį»i nĆ o xįŗ£y ra trong block try.
Thʰį»ng thƬ cĆ”c cĆ¢u lį»nh trong finally Äược dùng Äį» thį»±c hiį»n cĆ“ng viį»c giįŗ£i phóng tĆ i nguyĆŖn.
VĆ dỄ cho cĆ”c hoįŗ”t Äį»ng cį»§a file Äį» minh hį»a rƵ vį» finally:
Sau khi thį»±c hiį»n xong cĆ”c thao tĆ”c vį»i file trong Python thƬ bįŗ”n cįŗ§n Äóng nó lįŗ”i. Äóng file Äį» Äįŗ£m bįŗ£o quy chįŗæ Äóng mį» vĆ giįŗ£i phóng bį» nhį» cho chʰʔng trƬnh.
try:
f = open("test.txt",encoding = 'utf-8')
# thį»±c hiį»n cĆ”c thao tĆ”c vį»i tį»p
finally:
f.close()
Bįŗ±ng cĆ”ch nĆ y, ta có thį» yĆŖn tĆ¢m file Äược Äóng ÄĆŗng ngay cįŗ£ khi phĆ”t sinh ngoįŗ”i lį» khiįŗæn chʰʔng trƬnh dừng Äį»t ngį»t.
Mį»t vĆ dỄ khĆ”c có ngoįŗ”i lį»:
mauso = input("Bįŗ”n hĆ£y nhįŗp giĆ” trį» mįŗ«u sį»: ")
try:
ketqua = 15/int(mauso)
print("Kįŗæt quįŗ£ lĆ :",ketqua)
finally:
print("Bįŗ”n ÄĆ£ nhįŗp sį» khĆ“ng thį» thį»±c hiį»n phĆ©p tĆnh.")
Finally luĆ“n luĆ“n chįŗ”y bįŗ„t kį» có lį»i xįŗ£y ra hay khĆ“ng.
Khi bįŗ”n nhįŗp input lĆ 5, chʰʔng trƬnh trįŗ£ vį» kįŗæt quįŗ£:
Bįŗ”n hĆ£y nhįŗp giĆ” trį» mįŗ«u sį»: 5
Kįŗæt quįŗ£ lĆ : 3.0
Bįŗ”n ÄĆ£ nhįŗp sį» khĆ“ng thį» thį»±c hiį»n phĆ©p tĆnh.
VĆ khi input lĆ 0, kįŗæt quįŗ£ hiį»n thį»:
Bįŗ”n hĆ£y nhįŗp giĆ” trį» mįŗ«u sį»: 0
Bįŗ”n ÄĆ£ nhįŗp sį» khĆ“ng thį» thį»±c hiį»n phĆ©p tĆnh.
Ā