ในภาษาโปรแกรมใดๆ เราพบสถานการณ์ที่มีข้อยกเว้น (exceptions) ถูกยกขึ้น Python มีกลไกการจัดการข้อยกเว้นในตัว (built-in exception handling mechanisms) มากมาย มีข้อผิดพลาดที่ถูกจัดการโดยชื่อข้อยกเว้นเหล่านี้ Python ยังมีบล็อกที่ชื่อ finally ซึ่งจะถูก.execute ไม่ว่าข้อยกเว้นจะถูกจัดการหรือไม่ก็ตาม
ไวยากรณ์
try:
# โค้ด Python หลัก....
except:
# บล็อกตัวเลือก (optional)
# โค้ดจัดการข้อยกเว้น
finally:
# โค้ดนี้จะถูก execute เสมอ
ตัวอย่าง
ในโค้ดด้านล่าง เราเห็นข้อยกเว้นชื่อ NameError ที่นี่เราสร้างโค้ดที่อ้างอิงตัวแปรที่ไม่ได้ประกาศ แม้ข้อยกเว้นจะถูกจัดการ โค้ดยังคงรันเข้าไปในบล็อก "finally" โค้ดในบล็อก "finally" จะถูก execute ด้วย
try:
var1 = 'Tutorials'
# NameError ถูกยกขึ้น
print(var2)
# จัดการข้อยกเว้น
except NameError:
print("variable is not found in local or global scope.")
finally:
# ไม่ว่าจะมีข้อยกเว้นหรือไม่
# บล็อกนี้จะถูก execute เสมอ
print('finally block code here')
ผลลัพธ์
variable is not found in local or global scope. finally block code here
โดยไม่มีการจัดการข้อยกเว้น
สมมติว่าเราออกแบบโค้ดไม่ให้จัดการข้อยกเว้น แม้ในกรณีนั้น บล็อก finally ก็ยังจะ execute โค้ดสำหรับข้อยกเว้นที่ไม่ได้รับการจัดการ
ตัวอย่าง
try:
var1 = 'Tutorials'
# NameError ถูกยกขึ้น
print(var2)
# ไม่มีการจัดการข้อยกเว้น
finally:
# ไม่ว่าจะมีข้อยกเว้นหรือไม่
# บล็อกนี้จะถูก execute เสมอ
print('finally block code here')
ผลลัพธ์
finally block code here
Traceback (most recent call last):
File "xxx.py", line 4, in
print(var2)
NameError: name 'var2' is not defined