Một exception trong Python có thể được định nghĩa là đ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 đó.

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.

I. Các exception phổ biến trong Python

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.

Dưới đây là danh sách 5 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. IndentationError: Xảy ra khi chương trình thụt hàng không đúng.
  4. IOError: Xảy ra khi xử lý nhập xuất bị lỗi.
  5. 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 đó.

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.

II. 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 điều kiện bất thường làm dừng quá trình thực thi chương trình. Hãy xem xét ví dụ sau.

1
2
3
4
5
6
7
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")

Kết quả:

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, và chương trình thất bại hoàn toàn.

III. Cách tạo exception 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.

Cú pháp
1
2
3
4
5
6
7
8
9
10
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.

1
2
3
4
5
6
7
8
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

Ví dụ
1
2
3
4
5
6
7
8
9
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

Except bị thiếu exception

Như ở 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 chương trình trong try block bị lỗi nào thì sẽ chạy đoạn code ở except ở lỗi đó.

1
except Exception:

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

1
2
3
4
5
6
7
8
9
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")

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ụ
1
2
3
4
5
6
7
8
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()

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.

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

IV. 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:

1
2
3
4
5
6
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

Ví dụ
1
2
3
4
5
6
7
8
9
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")

V. 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:

1
raise Exception_class,<value> 

Ví dụ:

1
2
3
4
5
6
7
8
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ỏ“.

IV. Tự tạo exception

Python cho phép chúng ta tạo ra các exception bằng cách sử dụng từ khóa except. Tuy nhiên, mình khuyên bạn nên đọc phần này sau khi học xong các đối tượng và lớp Python.

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

1
2
3
4
5
6
7
8
9
10
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.

Theo:freetuts.net

 

ĐĂNG KÝ THÀNH VIÊN

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

Được quan tâm nhiều nhất

  • iPhone 11 Pro Max Teardown - Tiny Motherboard & BIG Battery!

  • Apple Watch Series 5 Teardown - Always on Display Explained

  • Apple Watch Series 4 Teardown

  • Phim Ngắn Đột Kích - Phiên bản 10 năm trước

Bạn thấy bài viết này thế nào?
Thể hiện yêu thương tác giả ở đây nhé!

Thích bài viết

thích

Chia sẻ ngay!

phuongle

Thành viên từ: 10/12/2019

Điểm uy tín: 5,987

SMod: 1,289 hướng dẫn đã chia sẻ

Team

Lập Trình Thành viên của Lập Trình

1 Thành viên

1,289 bài viết

Thêm bình luận

Bình luận bằng tài khoản Facebook

After viewing your support content - Please click advertisement for Support & Donate us team! Đóng