Xử Lý Lỗi Ngoại Lệ Trong Python (Try...Except) - Yêu Lập Trình

Khi thực thi các dòng lệnh trong Python, các lỗi khác nhau có thể xảy ra do nhiều nguyên nhân: Lỗi trong quá trình viết code, lỗi do nhập liệu… Khi có lỗi xảy ra hệ thống sẽ dừng chương trình và đưa ra thông báo lỗi. Nếu chúng ta không muốn hành vi mặc định này, chúng ta cần phải xử lý các ngoại lệ.

Nội dung của bài

  • 1 Khối lệnh try… except
  • 2 Ví dụ về try…except
  • 3 Xử lý nhiều exceptions
  • 4 Mệnh đề Else
  • 5 Mệnh đề Clause
  • 6 Tự tạo một exception
  • 7 Các exceptions mặc định trong Python
  • 8 Tổng kết

Khối lệnh try… except

Trong Python các ngoại lệ được xử lý bằng cách sử dụng khối lệnh try…except.

Xử lý ngoại lệ trong Python
Xử lý ngoại lệ trong Python

Python sẽ thực thi các dòng lệnh trong khối lệnh try như là một phần bình thường của chương trình.

Khi xảy ra lỗi trong quá trình thực thi, phần còn lại của khối lệnh sẽ được bỏ qua và khối lệnh except(ngoại lệ ) được thực hiện.

Ví dụ về try…except

try: x = 10/0 except: print('Something went wrong.') # Prints Something went wrong.

Hoặc

def divide(): x = 1/0 try: divide() except Exception as e: print(e) # Prints division by zero

Xử lý nhiều exceptions

Chúng ta có thể cài đặt nhiều khối lệnh except để bắt từng ngoại lệ cụ thể.

try: x = 1/0 except ZeroDivisionError: print('Attempt to divide by zero') except: print('Something else went wrong') # Prints Attempt to divide by zero

Ví dụ trên chúng ta có 2 khối lệnh except, khối lệnh một là để xử lý cho lỗi chia cho 0 và khối lệnh 2 là để xử lý cho các ngoại lệ khác.

Nếu chúng ta muốn xử lý chung 1 logic cho nhiều ngoại lệ thì có thể nhóm các ngoại lệ thành một tupe:

try: x = 1/0 except (ZeroDivisionError, ValueError): print('ZeroDivisionError or ValueError is raised') except: print('Something else went wrong') # Prints ZeroDivisionError or ValueError is raised

Ở ví dụ trên chúng ta xử lý chung 1 logic cho 2 ngoại lệ ZeroDivisionError và ValueError.

Mệnh đề Else

Khối lệnh try…exept có thêm mệnh đề tùy chọn else. Mênh đề else chỉ thực thi khi không có ngoại lệ nào xảy ra.

try: x = 10/2 except: print('Something went wrong') else: print('Nothing went wrong') # Prints Nothing went wrong

Mệnh đề Clause

Khối lện try…exept còn có một mệnh đề khác là finally.

try: x = 100/0 except: print('Something went wrong') finally: print('Always execute this') # Prints Something went wrong # Prints Always execute this

Sử dụng mệnh đề finally để xác định các hành động dọn dẹp phải được thực hiện như là close file.

try: f = open('myfile.txt') print(f.read()) except: print("Something went wrong") finally: f. close()

Tự tạo một exception

Chúng ta hoàn toàn có thể xây dựng riêng một exception để xử lý một số logic cụ thể.

class InputError(Exception): def __init__(self, value): print("Input Error: " + value) def divide(x, y): if y == 0: raise InputError('Mẫu phải khác 0') return x/y divide(10, 0) # prints Input Error: Mẫu phải khác 0

Các exceptions mặc định trong Python

Exception NameChú Thích
ExceptionĐây là lớp cơ sở cho tất cả các exception, nó sẽ xuất hiện khi có bất cứ một lỗi nào xảy ra.
StopIterationXuất hiện khi phương thức next() của interator không trỏ đến một đối tượng nào.
SystemExitXuất hiện khi dùng phương thức sys.exit()
StandardErrorLớp cơ sở cho tất cả các exception.
ArithmeticErrorXuất hiện khi có lỗi tính toán giữa các số với nhau
OverflowErrorXuất hiện khi thực hiện tính toán và giá trị của nó vượt quá ngưỡng giới hạn cho phép của kiểu dữ liệu.
FloatingPointErrorXuất hiện khi tính toán float thất bại.
ZeroDivisonErrorXuất hiện khi thực hiện phép chia cho 0.
AssertionErrorXuất hiện trong trường hợp lệnh assert thất bại.
AttributeErrorXuất hiện khi không tồn tại thuộc tính này, hoặc thiếu tham số truyền vào nó.
EOFErrorXuất hiện khi không có dữ liệu từ hàm input() hoặc cuối file.
ImportErrorXuất hiện khi lệnh import thất bại.
KeyboardInterruptXuất hiện khi ngắt trình biên dịch.
LookupErrorLớp cơ sở cho tất cả các lỗi về lookup.
IndexErrorXuất hiện khi index không tồn tại trong list, string,…
KeyErrorXuất hiện khi key không tồn tại trong dictionary.
NameErrorXuất hiện khi một biến không tồn tại trong phạm vi bạn gọi nó.
EnvironmentErrorXuất hiện khi có bất kỳ một lỗi nào ngoài phạm vị của Python.
IOErrorXuất hiện khi xử dụng input/ output thất bại, hoặc mở file không thành công.
OSErrorXuất hiện khi có lỗi từ hệ điều hành.
SyntaxErrorXuất hiện khi chương trình có lỗi cú pháp.
IndentationErrorXuất hiện khi bạn thụt dòng không đúng.
SystemErrorXuất hiện khi trình biên dịch có vấn đề nhưng mà nó lại không tự động exit.
SystemExitXuất hiện khi trình biên dịch được thoát bởi sys.exit().
TypeErrorXuất hiện khi thực thi toán tử hoặc hàm mà kiểu dữ liệu bị sai so với kiểu dữ liệu đã định nghĩa ban đầu.
ValueErrorXuất hiện khi chúng ta build 1 function mà kiểu dữ liệu đúng nhưng khi chúng ta thiết lập ở tham số là khác so với khi truyền vào.
RuntimeErrorXuất hiện khi lỗi được sinh ra không thuộc một danh mục nào.
NotImplementedErrorXuất hiện khi một phương thức trừu tượng cần được thực hiện trong lớp kế thừa chứ không phải là lớp thực thi
UnboundLocalErrorXuất hiện khi chúng ta cố tình truy cập vào một biến trong hàm hoặc phương thức, nhưng không thiết lập giá trị cho nó.

Tổng kết

Xử lý các ngoại lệ là một trong những kỹ năng rất quan trọng chúng ta cần có trong quá trình phát triển sản phẩm. Nhiều lập trình viên bỏ qua phần này, làm cho việc debug trở lên khó khăn. Các bạn hãy thực hành nhiều hơn nhé.

Từ khóa » Try Và Except Trong Python