INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Exceptions trong Python, xử lý lỗi đơn giản

Trong bài này chúng ta sẽ tìm hiểu Exception trong Python, đây là mã lệnh giúp xử lý các lỗi từ cơ bản đến nâng cao trong quá trình lập trình Python.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Một exception có thể được xem là một đoạn code bất thường trong một chương trình dẫn đến sự gián đoạn trong dòng chảy của chương trình đó, hay còn gọi là lỗi.

Bất cứ khi nào có exception xảy ra, chương trình sẽ dừng thực thi nên các đoạn mã phía dưới không được biên dịch. Do đó, một exception là lỗi mà trình biên dịch python không thể chạy được.

1. Các exception trong Python có sẵn

Python cung cấp cho chúng ta cách xử lý exception để giúp chương trình không bị gián đoạn. Vì vậy với những đoạn code bạn cảm thấy không an toàn thì hãy đưa nó vào một exception.

Bài viết này được đăng tại [free tuts .net]

Dưới đây là danh sách những exception thường được sử dụng trong lập trình Python:

  1. ZeroDivisionError: Xảy ra khi một số được chia cho số không.
  2. NameError: Xảy ra khi tên không tồn tại, có thể là cục bộ hoặc toàn cục.
  3. ValueError: Xảy ra khi bạn gán dữ liệu cho biến không chính xác.
  4. IndentationError: Xảy ra khi chương trình thụt hàng không đúng.
  5. IOError: Xảy ra khi xử lý nhập xuất bị lỗi.
  6. EOFError: Xảy ra khi kết thúc tập tin mà các thao tác vẫn còn thực hiện trên đó.
  7. KeyError: Xảy ra khi một key không tồn tại trong dictionary
  8. ImportError: Xảy ra khi bạn import một package / module không thành công
  9. SyntaxError: Xảy ra khi lỗi liên quan đến cú pháp
  10. ZeroDivisionError: Xảy ra khi bạn chia một số cho 0
  11. ArithmeticError: Lỗi liên quan đến toán học

Tuy nhiên, bạn có thể tự tạo ra các exception trong Python bằng cách sử dụng từ khóa except (mình sẽ trình bày nó ở phần cuối cùng của bài viết này).

2. Chuyện gì xảy ra nếu không dùng exception?

Như chúng ta đã thảo luận ở trên, exception là một lệnh điều kiện bắt lỗi trong quá trình thực thi chương trình.

Hãy xem xét ví dụ sau.

a = int(input("Enter a:"))  
b = int(input("Enter b:"))  
c = a/b;  
print("a/b = %d"%c)  
  
#other code:  
print("Vị trí khác của chương trình")  

Giả sử mình nhập số a = 10, b = 0, chạy chương trình lên sẽ có kết quả như sau:

Enter a:10
Enter b:0
Traceback (most recent call last):
  File "exception-test.py", line 3, in <module>
    c = a/b;
ZeroDivisionError: division by zero

Như vậy bạn sẽ nhận được một thông báo lỗi ZeroDivisionError.

Để bắt lỗi này và giúp chương trình không bị gián đoạn thì ta sử dụng lệnh try ... except.

3. Lệnh try ... except trong Python

Nếu chương trình python chứa những đoạn code đáng ngờ thì bạn hãy đặt chúng vào một exception, bằng cách ném chúng vào một khối lệnh try .. except.

Thường trong try là đoạn code nghi ngờ có lỗi, trong except là đoạn code thông báo lỗi hoặc trả về lỗi. Bạn có thể định nghĩa nhiều except.

python exception handling png

Cú pháp
try:  
    #block of code   
  
except Exception1:  
    #block of code  
  
except Exception2:  
    #block of code  
  
#other code  

Chúng ta cũng có thể sử dụng từ khóa ELSE kết hợp trong try-except để thực thi những đoạn code trong trường hợp except-block không chạy.

try:  
    #block of code   
  
except Exception1:  
    #block of code   
  
else:  
    #Đoạn này sẽ chạy nếu except block không chạy

python exception handling2 png

Ví dụ
try:  
    a = int(input("Enter a:"))  
    b = int(input("Enter b:"))  
    c = a/b;  
    print("a/b = %d"%c)  
except Exception:  
    print("Không thể chia cho 0")  
else:  
    print("Đây là đoạn code ELSE")

Kết quả:

Enter a:10
Enter b:2
a/b = 5
Đây là đoạn code ELSE

4. Except bị thiếu exception

Ở các ví dụ trên mình đã xác định rõ lỗi cho các except bằng cách đặt tên lỗi phía sau, lúc này nếu đoạn code nào trong try block bị lỗi nào thì sẽ chạy đoạn code ở except tương ứng với lỗi đó.

except Exception:

Tuy nhiên bạn hoàn toàn có thể bỏ từ khóa Exception như ở ví dụ dưới đây.

try:  
    a = int(input("Enter a:"))  
    b = int(input("Enter b:"))  
    c = a/b;  
    print("a/b = %d"%c)  
except:  
    print("Không thể chia cho 0")  
else:  
    print("Đoạn code trong Else")   

Lúc này dù thể loại lỗi là gì đi nữa thì lỗi đó vẫn được ném vào except.

Tóm lại bạn cần phải ghi nhớ những điều sau:

  • Python cho phép chúng ta không cần phải chỉ định exception ở lệnh except.
  • Có thể khai báo nhiều except, vì khối try có thể ném ra nhiều loại exception khác nhau.
  • Chúng ta cũng có thể chỉ định một khối else cùng với câu lệnh try-except và sẽ được thực thi nếu không có exception nào sinh ra trong khối try.
  • Các câu lệnh không ném exception nên đặt bên trong khối else.
Vi dụ
try:  
    #Đoạn này sẽ sinh ra lỗi nếu file không tồn tại.   
    fileptr = open("file.txt","r")  
except IOError:  
    print("File không tồn tại")  
else:  
    print("File mở thành công")  
    fileptr.close() 

5. Khai báo nhiều exception

Nếu bạn muốn nhiều exception cùng thực hiện chung một đoạn code thì sử dụng cú pháp sau để kai báo.

except (<Exception 1>,<Exception 2>,<Exception 3>,...<Exception n>)  
Ví dụ
try:    
    a=10/0;    
except ArithmeticError,StandardError:    
    print "Lỗi tính toán"    
else:    
    print "Thành công"    

6. Khối finaly trong Exception

Nếu khối else sẽ được thực hiện nếu không có exception nào được sinh ra thì khối finany sẽ luôn luôn được thực thi vì nó là một khối đặc biệt. Cú pháp của nó như sau:

try:  
    # Khối chứa đoạn code   
    # có khả năng sinh lỗi  
finally:  
    # Khối chứa đoạn code
    # luôn luôn thực thi

python exception handling3 png

Ví dụ
try:  
    fileptr = open("file.txt","r")    
    try:  
        fileptr.write("Nội dung ghi vào file")  
    finally:  
        fileptr.close()  
        print("Đóng file")  
except:  
    print("Mở file lỗi")  

7. Nhảy exception với từ khóa raise

Ở những ví dụ trên sẽ sinh ra những exception mà Python có hỗ trợ. Trường hợp bạn muốn tự định nghĩa exception, hoặc nhảy đến exception nào đó thì có thể sử dụng từ khóa raise.

Cú pháp:

raise Exception_class,<value>  

Ví dụ:

try:  
    age = int(input("Nhập tuổi của bạn?"))  
    if age<18:  
        raise ValueError
    else:  
        print("Tuổi không hợp lệ")  
except ValueError:  
    print("Tuổi quá nhỏ")  

Nếu bạn chạy và nhập tuổi bé hơn 18 thì sẽ xuất hiện lỗi "Tuổi quá nhỏ".

8. Tự tạo exception trong Python

Python cho phép chúng ta tạo ra các exception bằng cách sử dụng từ khóa except.

Mình khuyên bạn nên đọc phần này sau khi học xong kiến thức về lớp, bởi để định nghĩa một exception thì bạn phải sử dụng class.

Ví dụ: Tự tạo ra exception ErrorInCode.

class ErrorInCode(Exception):    
    def __init__(self, data):    
        self.data = data    
    def __str__(self):    
        return repr(self.data)    
    
try:    
    raise ErrorInCode(2000)    
except ErrorInCode as ae:    
    print("Received error:", ae.data)   

Như mình đã nói ở trên, vì trong ví dụ này có sử dụng class để tạo ra một đối tượng exception nên bạn phải hiểu về class-object thì mới hiểu được.

Trên là cách sử dụng exception để xử lý ngoại lệ trong Python. Hy vọng qua bài này bạn sẽ hiểu và vận dụng trong quá trình học tập và làm việc với Python.

Cùng chuyên mục:

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top