Ngoại lệ là một sự kiện, xảy ra trong quá trình thực thi chương trình làm gián đoạn luồng hướng dẫn bình thường của chương trình. Nói chung, khi một tập lệnh Python gặp một tình huống mà nó không thể đối phó, nó sẽ tạo ra một ngoại lệ. Một ngoại lệ là một đối tượng Python đại diện cho một lỗi.
Khi một tập lệnh Python tạo ra một ngoại lệ, nó phải xử lý ngoại lệ đó ngay lập tức, nếu không nó sẽ kết thúc và thoát.
Xử lý một ngoại lệ
Nếu bạn có một số mã đáng ngờ có thể tạo ra một ngoại lệ, bạn có thể bảo vệ chương trình của mình bằng cách đặt mã đáng ngờ trong một lần thử :khối. Sau khi thử:chặn, bao gồm một ngoại trừ :câu lệnh, theo sau là một khối mã xử lý vấn đề một cách tinh tế nhất có thể.
Cú pháp
Đây là cú pháp đơn giản, hãy thử .... ngoại trừ ... các khối khác -
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.
Dưới đây là một số điểm quan trọng về cú pháp được đề cập ở trên -
- Một câu lệnh try duy nhất có thể có nhiều câu lệnh ngoại trừ. Điều này rất hữu ích khi khối try chứa các câu lệnh có thể tạo ra các loại ngoại lệ khác nhau.
- Bạn cũng có thể cung cấp một mệnh đề ngoại trừ chung để xử lý mọi ngoại lệ.
- Sau (các) mệnh đề ngoại trừ, bạn có thể thêm một mệnh đề khác. Mã trong khối else thực thi nếu mã trong khối try:không tạo ra ngoại lệ.
- Khối else là một nơi tốt cho mã không cần sự bảo vệ của try:block.
Ví dụ
Ví dụ này mở một tệp, ghi nội dung vào tệp và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
#!/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()
Đầu ra
Điều này tạo ra kết quả sau -
Written content in the file successfully
Ví dụ
Ví dụ này cố gắng mở một tệp mà bạn không có quyền ghi, vì vậy nó tạo ra một ngoại lệ -
#!/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"
Đầu ra
Điều này tạo ra kết quả sau -
Error: can't find file or read data
Điều khoản ngoại trừ không có ngoại lệ
Bạn cũng có thể sử dụng câu lệnh ngoại trừ không có ngoại lệ nào được định nghĩa như sau -
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.
Loại thử ngoại trừ này câu lệnh bắt tất cả các ngoại lệ xảy ra. Mặc dù vậy, việc sử dụng loại câu lệnh thử ngoại trừ này không được coi là một phương pháp lập trình tốt vì nó bắt được tất cả các trường hợp ngoại lệ nhưng không làm cho lập trình viên xác định được nguyên nhân gốc rễ của sự cố có thể xảy ra.
Điều khoản ngoại trừ có nhiều trường hợp ngoại lệ
Bạn cũng có thể sử dụng cùng một câu lệnh ngoại trừ để xử lý nhiều trường hợp ngoại lệ như sau -
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.
Mệnh đề try-last
Bạn có thể sử dụng cuối cùng :chặn cùng với thử :khối. Khối cuối cùng là nơi để đặt bất kỳ mã nào phải thực thi, cho dù khối thử có đưa ra một ngoại lệ hay không. Cú pháp của câu lệnh try-last là thế này -
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
Bạn cũng không thể sử dụng mệnh đề else cùng với mệnh đề cuối cùng.
Ví dụ
#!/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"
Đầu ra
Nếu bạn không có quyền mở tệp ở chế độ ghi, thì điều này sẽ tạo ra kết quả sau -
Error: can't find file or read data
Ví dụ tương tự có thể được viết rõ ràng hơn như sau -
Ví dụ
#!/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"
Khi một ngoại lệ được ném vào khối try, việc thực thi ngay lập tức được chuyển đến khối cuối cùng. Sau khi tất cả các câu lệnh trong khối cuối cùng được thực thi, ngoại lệ được đưa ra một lần nữa và được xử lý trong các câu lệnh ngoại trừ nếu có trong lớp cao hơn tiếp theo của câu lệnh try-exception.