ข้อยกเว้นคือเหตุการณ์ที่เกิดขึ้นระหว่างการทำงานของโปรแกรมที่ขัดขวางขั้นตอนปกติของคำสั่งของโปรแกรม โดยทั่วไป เมื่อสคริปต์ Python พบสถานการณ์ที่ไม่สามารถรับมือได้ จะทำให้เกิดข้อยกเว้น ข้อยกเว้นคืออ็อบเจกต์ Python ที่แสดงข้อผิดพลาด
เมื่อสคริปต์ Python ทำให้เกิดข้อยกเว้น สคริปต์ต้องจัดการข้อยกเว้นทันที ไม่เช่นนั้นจะยุติและออก
การจัดการข้อยกเว้น
หากคุณมีรหัสที่น่าสงสัยที่อาจทำให้เกิดข้อยกเว้น คุณสามารถปกป้องโปรแกรมของคุณโดยวางรหัสที่น่าสงสัยใน ลอง :บล็อก. หลังจากลอง:บล็อก ให้ใส่ ยกเว้น :คำสั่ง ตามด้วยบล็อกของโค้ดที่จัดการปัญหาได้อย่างสวยงามที่สุด
ไวยากรณ์
นี่คือไวยากรณ์ง่ายๆ ลอง....ยกเว้น...บล็อกอื่น -
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
ต่อไปนี้คือประเด็นสำคัญบางประการเกี่ยวกับไวยากรณ์ที่กล่าวถึงข้างต้น -
- คำสั่ง try ครั้งเดียวสามารถมีได้หลายคำสั่ง ยกเว้นคำสั่ง สิ่งนี้มีประโยชน์เมื่อบล็อกการลองมีคำสั่งที่อาจมีข้อยกเว้นประเภทต่างๆ
- คุณยังสามารถระบุส่วนคำสั่งทั่วไป ยกเว้น ซึ่งจัดการข้อยกเว้นใดๆ ก็ได้
- หลังประโยคยกเว้น คุณสามารถรวมประโยคอื่นได้ โค้ดใน else-block จะทำงานหากโค้ดในบล็อก try:ไม่ทำให้เกิดข้อยกเว้น
- else-block เป็นที่ที่ดีสำหรับโค้ดที่ไม่ต้องลองใช้:การป้องกันของบล็อก
ตัวอย่าง
ตัวอย่างนี้เปิดไฟล์ เขียนเนื้อหาใน ไฟล์ และออกมาอย่างสวยงามเพราะไม่มีปัญหาเลย -
#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully" fh.close()
ผลลัพธ์
สิ่งนี้ให้ผลลัพธ์ดังต่อไปนี้ -
Written content in the file successfully
ตัวอย่าง
ตัวอย่างนี้พยายามเปิดไฟล์ที่คุณไม่ได้รับอนุญาตให้เขียน ดังนั้นจึงทำให้เกิดข้อยกเว้น -
#!/usr/bin/python try: fh = open("testfile", "r") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully"
ผลลัพธ์
สิ่งนี้ให้ผลลัพธ์ดังต่อไปนี้ -
Error: can't find file or read data
ข้อยกเว้นที่ไม่มีข้อยกเว้น
คุณสามารถใช้คำสั่งยกเว้นโดยไม่มีข้อยกเว้นที่กำหนดไว้ดังต่อไปนี้ -
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
ชนิดของ ลองยกเว้น คำสั่งจับข้อยกเว้นทั้งหมดที่เกิดขึ้น การใช้คำสั่ง try-except ประเภทนี้ไม่ถือเป็นแนวทางปฏิบัติในการเขียนโปรแกรมที่ดี เพราะมันจับข้อยกเว้นทั้งหมด แต่ไม่ได้ทำให้โปรแกรมเมอร์ระบุสาเหตุของปัญหาที่อาจเกิดขึ้น
ข้อยกเว้นที่มีข้อยกเว้นหลายข้อ
คุณสามารถใช้คำสั่งยกเว้นคำสั่งเดียวกันเพื่อจัดการกับข้อยกเว้นหลายประการดังนี้ −
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
ข้อทดสอบสุดท้าย
คุณสามารถใช้ ในที่สุด :บล็อกพร้อมกับ ลอง :บล็อก. บล็อกสุดท้ายเป็นที่สำหรับวางโค้ดใด ๆ ที่ต้องดำเนินการ ไม่ว่า try-block จะเป็นข้อยกเว้นหรือไม่ก็ตาม ไวยากรณ์ของคำสั่ง try-finally คือ −
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
คุณไม่สามารถใช้ส่วนประโยคอื่นร่วมกับประโยคสุดท้ายได้
ตัวอย่าง
#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") finally: print "Error: can\'t find file or read data"
ผลลัพธ์
หากคุณไม่ได้รับอนุญาตให้เปิดไฟล์ในโหมดเขียน สิ่งนี้จะทำให้เกิดผลลัพธ์ดังต่อไปนี้ -
Error: can't find file or read data
ตัวอย่างเดียวกันสามารถเขียนได้ชัดเจนยิ่งขึ้นดังนี้ −
ตัวอย่าง
#!/usr/bin/python try: fh = open("testfile", "w") try: fh.write("This is my test file for exception handling!!") finally: print "Going to close the file" fh.close() except IOError: print "Error: can\'t find file or read data"
เมื่อมีการส่งข้อยกเว้นในบล็อกการลอง การดำเนินการจะส่งผ่านไปยังบล็อกสุดท้ายทันที หลังจากที่ดำเนินการคำสั่งทั้งหมดในบล็อกสุดท้ายแล้ว ข้อยกเว้นจะถูกยกขึ้นอีกครั้งและจะได้รับการจัดการในคำสั่งยกเว้น ถ้ามีอยู่ในเลเยอร์ที่สูงกว่าถัดไปของคำสั่งพยายามยกเว้น