มีหลายสถานการณ์เกิดขึ้นเมื่อเราต้องการให้โปรแกรมของเราทำงานนี้โดยเฉพาะ โดยไม่คำนึงว่าโปรแกรมจะทำงานอย่างสมบูรณ์หรือมีข้อผิดพลาดเกิดขึ้น ส่วนใหญ่เพื่อตรวจจับข้อผิดพลาดหรือข้อยกเว้น เราจะพยายามยกเว้นการบล็อก
คำสั่ง "ลอง" ให้ประโยคทางเลือกที่มีประโยชน์มาก ซึ่งมีไว้สำหรับกำหนด 'การดำเนินการล้างข้อมูล' ที่ต้องดำเนินการภายใต้สถานการณ์ใดๆ ตัวอย่างเช่น −
>>> try: raise SyntaxError finally: print("Learning Python!") Learning Python! Traceback (most recent call last): File "<pyshell#11>", line 2, in <module> raise SyntaxError File "<string>", line None SyntaxError: <no detail available>
ประโยคสุดท้ายจะดำเนินการไม่ว่าอะไรจะเกิดขึ้น แต่ส่วนคำสั่ง else จะดำเนินการก็ต่อเมื่อไม่มีข้อยกเว้น
ตัวอย่างที่ 1 − ลองพิจารณาตัวอย่างด้านล่าง ที่ทุกอย่างดูดีและเขียนไปยังไฟล์โดยไม่มีข้อยกเว้น (โปรแกรมกำลังทำงานอยู่) จะแสดงผลลัพธ์ต่อไปนี้ -
file = open('finally.txt', 'w') try: file.write("Testing1 2 3.") print("Writing to file.") except IOError: print("Could not write to file.") else: print("Write successful.") finally: file.close() print("File closed.")
เมื่อเรียกใช้โปรแกรมข้างต้น จะได้รับ -
Writing to file. Write successful. File closed.
ตัวอย่างที่ 2 − ลองยกข้อยกเว้นโดยทำให้ไฟล์เป็นแบบอ่านอย่างเดียวและพยายามเขียนลงไป ทำให้เกิดข้อยกเว้น
file = open('finally.txt', 'r') try: file.write("Testing1 2 3.") print("Writing to file.") except IOError: print("Could not write to file.") else: print("Write successful.") finally: file.close() print("File closed.")
โปรแกรมด้านบนจะให้ผลลัพธ์บางอย่างเช่น −
Could not write to file. File closed.
ในกรณีที่เรามีข้อผิดพลาด แต่เราไม่ได้ใส่คำสั่งใด ๆ ยกเว้นข้อเพื่อจัดการกับมัน ในกรณีเช่นนี้ การดำเนินการล้างข้อมูล (บล็อกสุดท้าย) จะถูกดำเนินการก่อน จากนั้นคอมไพเลอร์จะแจ้งข้อผิดพลาด มาทำความเข้าใจแนวคิดด้วยตัวอย่างด้านล่างกัน −
ตัวอย่าง
file = open('finally.txt', 'r') try: file.write(4) print("Writing to file.") except IOError: print("Could not write to file.") else: print("Write successful.") finally: file.close() print("File closed.")
ผลลัพธ์
File closed. Traceback (most recent call last): File "C:/Python/Python361/finally_try_except1.py", line 4, in <module> file.write(4) TypeError: write() argument must be str, not int
จากข้างบนนี้ เราจะเห็นได้ว่าในที่สุด clause จะทำงานเสมอ โดยไม่คำนึงถึงว่ามีข้อยกเว้นเกิดขึ้นหรือไม่