Hướng dẫn xử lý Exception trong Python

Ngày đăng: 27/04/2019   -    Cập nhật: 22/10/2020

1. Exception là gì?


Exception: Là những lỗi xảy ra trong quá trình thực thi một chương trình (hay còn gọi là ngoại lệ), khiến chương trình bị dừng một cách đột ngột không như mong muốn.


Exception khiến thay đổi luồng thực thi bình thường của chương trình.


Khi một đoạn mã Python phát sinh ngoại lệ, ta cần xử lý ngoại lệ, nếu không chương trình sẽ bị dừng.



Hướng dẫn xử lý ngoại lệ (exception) trong Python

Hướng dẫn xử lý ngoại lệ (exception) trong Python

2. Cơ chế xử lý Exception trong Python


Cơ chế xử lý ngoại lệ của Python được cài đặt thông qua việc sử dụng các khối lệnh: try, except finally.


  • Khối try: Dùng để thử lỗi. Khối try sẽ chứa các đoạn mã có khả năng gây ra lỗi
  • Khối except: Dùng để xử lý lỗi. Khối except sẽ chứa các đoạn mã xử lý lỗi được phát sinh trong khối try. Khối except có ý nghĩa giống như khối catch ở các ngôn ngữ khác như Java, C#
  • Khối finally: Dùng để chứa các đoạn mã sẽ được thực thi cho dù chương trình có lỗi hay không. Khối này thường dùng để chứa các đoạn lệnh giải phóng tài nguyên sau khi thực thi xong chương trình, VD như đóng file, đóng kết nối đến CSDL v.v…


 

Cơ chế xử lý lỗi của Python như sau:



Nếu chương trình có lỗi, khối try sẽ dừng lại, và chương trình sẽ chuyển đến khối except để thực thi và xử lý lỗi.


Nếu chương trình có nhiều khối except, thì từng khối sẽ lần lượt được đánh giá theo thứ tự từ trên xuống dưới, khối nào xử lý được lỗi thì sẽ được thực thi.


Nếu chương trình không có lỗi, khối try sẽ được thực thi toàn bộ, chương trình không thực thi khối except.


Ta có thể sử dụng nhiều khối except sau khối try, trong trường hợp ta muốn xử lý nhiều loại lỗi khác nhau.


3. Ví dụ về xử lý Exception trong Python


Trong ví dụ xử lý Exception này, ta in ra giá trị của biến age trong khối try. Biến age chưa được khai báo, vì vậy khi sử dụng sẽ có lỗi.


Trong chương trình, ta khai báo 2 khối except, một khối xử lý lỗi về tên biến (NameError), một khối xử lý lỗi nói chung.




try:
  print(age)
except NameError:
  print("Bien age chua duoc dinh nghia")
except:
  print("Co loi xay ra trong chuong trinh !")
 

> Muốn biết các loại ngoại lệ (như là NameError) trong Python là những gì thì xem tại đây.


Khi thực thi chương trình, ta thấy chương trình hiện thông báo lỗi như ta mong muốn.


Khối except đầu tiên được thực thi, vì ta chưa khai báo biến.

Cơ chế xử lý Exception trong Python - VD1

Cơ chế xử lý Exception trong Python - VD1


Nếu ta thay đổi lại chương trình, ta sẽ thấy thông báo lỗi khác.


Ở đây ta đã sửa lại chương trình, ta khai báo biến age, rồi in ra giá trị của biến age.




try:
  age = 5
  print("age = " + age)
except NameError:
  print("Bien age chua duoc dinh nghia")
except:
  print("Co loi xay ra trong chuong trinh")
 


Tuy nhiên, trong bài này, ta đã cộng chuỗi sai, vì biến age thuộc kiểu int, lẽ ra ta phải chuyển thành kiểu string.


> Lưu ý: Khi nối chuỗi trong Python thì phải sử dụng cùng kiểu dữ liệu. Vì thế ta phải chuyển age thành kiểu str


Ta thấy chương trình đã không thực thi khối except đầu tiên (vì không có lỗi này), mà chương trình đã thực thi khối except thứ hai.


Kết quả được hiển thị như hình bên dưới.


Cơ chế xử lý Exception trong Python - VD2

Cơ chế xử lý Exception trong Python - VD2

 

Ngoài ra, ta có thể sử dụng từ khóa else để định nghĩa một khối lệnh sẽ được thực thi nếu không có lỗi phát sinh.


Dĩ nhiên là hành động sau khi đã thực thi khối try.


Ví dụ:




try:
  print("To be or not to be")
except:
  print("Co loi xay ra !")
else:
  print("Ket thuc chuong trinh")
 


Trong ví dụ này, ta đã sử dụng khối try ... except để minh họa việc xử lý lỗi.

Tuy nhiên, trong ví dụ này, khối try không có lỗi, vì vậy chương trình không thực thi khối except, mà sẽ thực thi khối else.


Kết quả của chương trình hiển thị khối else đúng như ta mong muốn

Sử dụng Else để để xử lý ngoại lệ trong Python

Kết hợp sử dụng Else để để xử lý ngoại lệ trong Python


Ví dụ về sử dụng khối finally trong Python



Trong ví dụ dưới đây, ta sử dụng khối try ... exceptfinally.



try:
  print(x)
except:
  print("Co loi xay ra trong chuong trinh")
finally:
  print("Thuc thi khoi finally !")
 


Vì biến x chưa khai báo, nên có lỗi.


Chương trình sẽ thực thi khối except, sau đó sẽ thực thi khối finally, vì khối finally sẽ luôn được thực hiện, bất kể chương trình có xảy ra lỗi hay không có lỗi.


Kết quả của chương trình hiển thị đúng như ta mong muốn:

Cơ chế hoạt động của khối Finally khi xử lý ngoại lệ trong Python

Cơ chế hoạt động của khối Finally khi xử lý ngoại lệ trong Python

Tổng kết

Như vậy bạn đã biết cơ chế hoạt động cũng như là cách xử lý ngoại lệ trong Python. Chúng ta sẽ còn sử dụng cơ chế này rất nhiều trong quá trình lập trình. Hãy cố gắng ghi nhớ nhé.


Chúc bạn học Python tốt!



TONY HÙNG CƯỜNG


Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!