http://vietjack.com/python/index.jsp Copyright © vietjack.com Xử lý ngoại lệ (Exception Handling) Python Exception gì? Ngoại lệ điều kiện bất thường chương trình mà phá vỡ luồng thực thi chương trình Bất ngoại lệ xuất hiện, mà không xử lý, chương trình ngừng thực thi code khơng thực thi Python định nghĩa sẵn nhiều ngoại lệ, mà trình bày chương Standard Exception Trong chương tìm hiểu cách xử lý ngoại lệ cách tạo Custom Exception Xử lý ngoại lệ Python Nếu bạn thấy code khả nghi (có thể gây ngoại lệ) bạn phòng thủ chương trình cách đặt khối code khả nghi khối try Khối try theo sau lệnh except Sau đó, theo sau lệnh mà xử lý vấn đề Cú pháp Dưới cú pháp khối try except else Python: try: Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; except ExceptionI: Neu co ExceptionI, thi thuc thi khoi code except ExceptionII: Neu co ExceptionII, thi thuc thi khoi code else: Neu khong co exception nao thi thuc thi khoi code Dưới số điểm bạn cần lưu ý: Phần code khả nghi mà có khả tạo exception cần bao quanh khối try http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com Khối try theo sau lệnh except Có thể có nhiều lệnh except với khối try đơn Lệnh except xác định exception mà xảy Trong trường hợp mà exception xảy ra, lệnh tương ứng thực thi Ở cuối khối try, bạn cung cấp lệnh else Nó thực thi khơng có exception xảy Khối else địa điểm tốt cho code mà không cần bảo vệ khối try Ví dụ Ví dụ sau mở file, ghi nội dung vào file sau đóng file, tất hoạt động thành công: try: fh = open("testfile", "w") fh.write("Day la mot kiem tra nho ve xu ly ngoai le!!") except IOError: print "Error: Khong tim thay file" else: print "Thanh cong ghi noi dung vao file" fh.close() Kết là: Thanh cong ghi noi dung vao file Ví dụ Ví dụ sau mở file để ghi bạn khơng có quyền ghi, tạo exception: try: fh = open("testfile", "r") fh.write("Day la mot kiem tra nho ve xu ly ngoai le!!") except IOError: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com print "Error: Khong tim thay file" else: print "Thanh cong ghi noi dung vao file" Kết là: Error: Khong tim thay file Mệnh đề except mà không xác định Exception Python Lệnh except sử dụng mà không xác định exception Lệnh try-except bắt tất exception mà xuất Sử dụng loại lệnh try-except khơng phải thực hành lập trình tốt, bắt tất exception khơng làm cho lập trình viên biết nguyên vấn đề làm xuất exception Cú pháp try: Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; except: Neu co bat ky exception nao, thi thuc thi khoi code else: Neu khong co exception nao, thi thuc thi khoi code Mệnh đề except với nhiều exception Python Sử dụng lệnh except trên, bạn khai báo nhiều exception sau: try: Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; except(Exception1[, Exception2[, ExceptionN]]]): Neu co bat ky exeption nao danh sach, http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com thi thuc thi khoi code else: Neu khong co exception nao, thi thuc thi khoi code Khối try-finally Python Trong trường hợp có code mà người dùng muốn thực thi, có xuất exception hay khơng khối code đặt khối finally Khối finally luôn thực thi bất chấp có hay khơng exception Cú pháp khối try-finally là: try: Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; Do co exeption nen khoi bi bo qua finally: Khoi nen duoc thuc thi Ghi chú: Bạn cung cấp nhiều mệnh đề except, mệnh đề finally, không cung cấp hai Ngồi bạn khơng thể sử dụng mệnh đề else với mệnh đề finally Ví dụ try: fh = open("testfile", "w") fh.write("Day la mot kiem tra nho ve xu ly ngoai le!!") finally: print "Error: Khong tim thay file" Nếu bạn khơng có quyền mở file chế độ ghi, code cho kết quả: Error: Khong tim thay file http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com Ví dụ viết rõ ràng sau: try: fh = open("testfile", "w") try: fh.write("Day la mot kiem tra nho ve xu ly ngoai le!!") finally: print "Chuan bi dong file" fh.close() except IOError: print "Error: Khong tim thay file" Khi exception ném khối try, trình thực thi truyền tới khốifinally Sau tất lệnh khối finally thực thi, exception tạo lại lần xử lý lệnh except có mặt lớp lệnh try-except Tham số Exception Python Một Exception có tham số, mà giá trị mà cung cấp thông tin bổ sung vấn đề Nội dung tham số đa dạng tùy vào exception Dưới cú pháp: try: Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; except Kieu_exception, Tham_so: Ban co the in gia tri cua Tham_so tai day Nếu bạn viết code để xử lý exception đơn, bạn có biến theo sau tên exception lệnh except Nếu bạn khai báo nhiều exception bạn có biến theo sau tuple exception Ví dụ Ví dụ exception đơn: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com # Dinh nghia mot ham o day def temp_convert(var): try: return int(var) except ValueError, Argument: print "Tham so khong chua cac so\n", Argument # Goi ham tren temp_convert("xyz"); Tạo Exception Python Bạn ném tường minh Exception Python sử dụng lệnh raise Cú pháp lệnh raise sau: raise [Exception [, args ]] Ở đây, Lop_Exception kiểu exception tham số value (tùy ý) giá trị Để truy cập giá trị từ khóa as sử dụng Ví dụ try: a=10 print a raise NameError("Hello") except NameError as e: print "Mot Exception xuat hien" print e Trong ví dụ trên, e sử dụng biến tham chiếu mà lưu trữ giá trị exception Ghi chú: để bắt exception, mệnh đề except phải tham chiếu tới exception ném Ví dụ, để bắt exception trên, phải viết mệnh đề except sau: try: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com Ban thuc hien cac hoat dong cua minh tai day; Va day la phan code co the tao exception; except "Invalid level!": Xu ly ngoai le o day else: Phan lai cua code Custom Exception Python Python cho phép bạn tạo riêng cho exception cách kế thừa lớp từ Standard Exception Ví dụ liên quan tới RuntimeError Ở đây, lớp tạo lớp của RuntimeError Trong khối try, exception định nghĩa người dùng tạo bắt khối except Biến e sử dụng để tạo instance lớp Networkerror class Networkerror(RuntimeError): def init (self, arg): self.args = arg Sau định nghĩa lớp trên, bạn tạo exception sau: try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... Ví dụ Ví dụ sau mở file, ghi nội dung vào file sau đóng file, tất hoạt động thành công: try: fh = open("testfile", "w") fh.write("Day la mot kiem tra nho ve xu ly ngoai le! !") except IOError:... Ví dụ try: fh = open("testfile", "w") fh.write("Day la mot kiem tra nho ve xu ly ngoai le! !") finally: print "Error: Khong tim thay file" Nếu bạn khơng có quyền mở file chế độ ghi, code cho kết... nho ve xu ly ngoai le! !") finally: print "Chuan bi dong file" fh.close() except IOError: print "Error: Khong tim thay file" Khi exception ném khối try, trình thực thi truyền tới khốifinally Sau