คำสั่งประเภทนี้เป็นวิธีการประมวลผลหลายรายการยกเว้นคำสั่งหลายรายการ มาเรียนรู้การซ้อนกันของคำสั่ง try...ยกเว้นคำสั่งผ่านตัวอย่าง
deftest():n=int(input('มี 3 ข้อความให้ทดสอบ โปรดเลือก (1/2/3):')) ifn==1: #keyError ข้อยกเว้น my_dict={'dotcpp':123}print ( my_dict['dot'])elifn==2:#IndexError ข้อยกเว้น my_list=[1,2,3,4,5]พิมพ์(my_list[100])eli fn==3:#NameError พิมพ์ข้อยกเว้น ('ตัวแปรที่ไม่มีอยู่จริง dotcpp:', dotcpp) ลอง: ลอง: ลอง: ทดสอบ () ยกเว้น KeyError: พิมพ์ (' ข้อยกเว้น KeyError') ยกเว้น IndexError: พิมพ์ (' ข้อยกเว้น IndexError') ยกเว้น NameError: พิมพ์('ข้อยกเว้น NameError')
เราทดสอบ 1/2/3 ตามลำดับ และผลลัพธ์ที่ได้จะเป็นดังนี้:
มี 3 คำสั่งที่จะทดสอบ โปรดเลือก (1/2/3): 1KeyError ข้อยกเว้น มี 3 คำสั่งที่จะทดสอบ โปรดเลือก (1/2/3): 2IndexError ข้อยกเว้น มี 3 คำสั่งที่จะทดสอบ โปรดเลือก (1/ 2/3): 3NameError ข้อยกเว้น
ในตัวอย่างนี้ ขั้นแรกเราป้อนการตัดสิน n ในฟังก์ชันที่กำหนด จากนั้นให้สถานการณ์ข้อยกเว้นสามสถานการณ์ตามค่าของ n จากนั้นเราซ้อนสามคำสั่ง try..ยกเว้น คำสั่งที่ส่วนท้าย กล่าวคือ ผลลัพธ์ของ คำสั่ง test() จะต้องผ่านการตัดสินสามระดับ
กลไกการจัดการข้อยกเว้นที่สมบูรณ์ไม่สามารถแยกออกจาก คำสั่ง สุดท้าย ได้ หน้าที่ของคำสั่งนี้คือไม่ว่าจะมีข้อยกเว้นเกิดขึ้นในโปรแกรมของเราหรือไม่ก็ตาม โค้ดภายใต้คำสั่งสุดท้ายจะถูกดำเนินการ
ลอง: blockยกเว้น [ประเภทข้อผิดพลาด]: deal1finally: deal2
ลองมาดูโครงสร้างนี้ผ่านตัวอย่าง:
deftest():n=int(input('Please enter an integer:'))print(n)try:test()ยกเว้นKeyError:print('KeyError ข้อยกเว้น')finally:print('finally state has been Executed')
ลองป้อน 6 และ dotcpp ตามลำดับเพื่อดูผลลัพธ์:
โปรดป้อนจำนวนเต็ม: ดำเนินการคำสั่ง 55finally แล้ว โปรดป้อนจำนวนเต็ม: ดำเนินการคำสั่ง dotcppfinally แล้ว Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module> test()FileC:/Users/test.py,line2,intestn=int(input('Please enter an integer:'))ValueError: invalidliteralforint()withbase10:'dotcpp'
จากตัวอย่างนี้ เราจะเห็นว่าคำสั่งสุดท้ายจะถูกดำเนินการโดยไม่คำนึงว่าจะมีข้อยกเว้นเกิดขึ้นในโปรแกรมของเราหรือไม่
คำสั่งสุดท้ายที่เราเรียนรู้ข้างต้นคือคำสั่งที่จะถูกดำเนินการโดยไม่คำนึงว่าจะมีข้อยกเว้นเกิดขึ้นในคำสั่งหรือไม่ คำสั่ง try...ยกเว้น...else ที่เราจะเรียนรู้ด้านล่างนี้จะถูกดำเนินการเมื่อไม่มีข้อยกเว้นเกิดขึ้นในโปรแกรมเท่านั้น โครงสร้างไวยากรณ์ของมันคือ:
ลอง: blockยกเว้น [ประเภทข้อผิดพลาด]:deal1else:deal2
ลองดูตัวอย่างด้านล่าง:
deftest():n=int(input('กรุณากรอกจำนวนเต็ม:'))print('ค่าที่ป้อนคือ:',n)try:test()ยกเว้นValueError:print('ValueError ข้อยกเว้น')else:print(' ปัจจุบัน ไม่มีข้อยกเว้นเกิดขึ้นในโปรแกรม')
ผลลัพธ์คือ:
โปรดป้อนจำนวนเต็ม: 5 ค่าอินพุตคือ: 5 ไม่มีข้อยกเว้นในโปรแกรมปัจจุบัน
เมื่อเราใส่ค่า dotcpp
โปรดป้อนจำนวนเต็ม: dotcppValueError ข้อยกเว้น
เราจะเห็นว่าคำสั่ง else จะไม่ถูกดำเนินการเมื่อโปรแกรมทำงานผิดปกติ ไม่ใช่เรื่องยากที่จะแยกแยะคำสั่งเหล่านี้