- vừa được xem lúc

Tùy chỉnh Exceptions trong Python

0 0 24

Người đăng: Nguyen Manh Thang

Theo Viblo Asia

Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về cách tùy chỉnh các Exceptions trong Python.Mình sẽ giải thích cho các bạn hiểu và cách xử dụng chúng. Các bạn cùng tìm hiểu trong bài viết của mình nhé!


Trong bài này mình sẽ hướng dẫn các bạn cách tùy chỉnh các Exceptions theo mong muốn của cá nhân các bạn. Mình sẽ đưa ra những ví dụ để các bạn dễ hiểu hơn.

Trong Python đã có sẵn rất nhiều Exceptions được tích hợp sẵn.Tuy nhiên đôi khi bạn vẫn cần tạo ra các Exceptions của riêng mình để phục vụ mục đích của bạn.


Tạo Exceptions tùy chỉnh

Trong Python, người dùng có thể xác định các Exceptions tùy chỉnh bằng cách tạo mới 1 Exceptions. Exceptions tạo mới phải được dẫn xuất từ Exceptions có sẵn của hệ thống.

>>> class CustomError(Exception):
... pass
... >>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError >>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

Ở ví dụ trên. Mình đã tạo 1 Exceptions có tên là CustomError từ Exceptions có sẵn. Exceptions mới này sẽ raise ra một message thông báo lỗi.

Khi thiết kế một chương trình Python bạn nên đặt tất cả các tất cả các Exceptions do người dùng định nghĩa ra một file riêng. Và define file dưới tên gọi exceptions.py hoặc là errors.py.


Ví dụ : Exception do người dùng định nghĩa trong Python

Ở trong ví dụ này mình sẽ minh họa các sử dụng Exception do người dùng định nghĩa ra trong một chương trình thực tế.

Chương trình này sẽ yêu cầu người dụng nhập một số cho đến khi số mà họ nhập đúng với số mà chúng ta đã định nghĩa sẵn. Để giúp cho người dùng có thể tìm ra số đó nhanh hơn chúng ra sẽ define ra những message gợi ý cho họ.

# define Python user-defined exceptions
class Error(Exception): """Base class for other exceptions""" pass class ValueTooSmallError(Error): """Raised when the input value is too small""" pass class ValueTooLargeError(Error): """Raised when the input value is too large""" pass # you need to guess this number
number = 10 # user guesses a number until he/she gets it right
while True: try: i_num = int(input("Enter a number: ")) if i_num < number: raise ValueTooSmallError elif i_num > number: raise ValueTooLargeError break except ValueTooSmallError: print("This value is too small, try again!") print() except ValueTooLargeError: print("This value is too large, try again!") print() print("Congratulations! You guessed it correctly.")

Đây là ví dụ khi bạn chạy chương trình trên :

Enter a number: 12
This value is too large, try again! Enter a number: 0
This value is too small, try again! Enter a number: 8
This value is too small, try again! Enter a number: 10
Congratulations! You guessed it correctly.

Chúng ta sẽ định nghĩa 1 call để gọi đến exceptions Error được định nghĩa sẵn trong hệ thống. 2 exceptions khác là (ValueTooSmallErrorValueTooLargeError) mà chương trình trên gọi đều được bắt nguồn từ class Error. Đây là một cách thông thường để xác định exceptions do người dụng define trong Python. Tuy nhiên bạn vẫn sẽ có những cách khác để tùy chỉnh exceptions.


Tùy chỉnh class Exception

Ta có thêm 1 cách nữa là tùy chỉnh class Exception để có thể nhận vào các đối số khác theo mong muốn của chúng ta.

Để tìm hiểu về cách tùy chỉnh các class Exception thì bạn cần có kiến thức cơ bản về lập trình Hướng Đối Tượng.

Dưới đây mình có 1 ví dụ :

class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Đầu ra của chương trình trên :

Enter salary amount: 2000
Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Ở đây chung ta đã ghi đè hàm tạo của class Exception để nhận vào 2 param là salarymessage.Sau đó hàm tạo của class Exception cha sẽ được gọi theo cách thủ công với đối số self.messag bằng cách sử dụng super().

Thuộc tính self.salary sẽ được sử dụng ở dưới.Sau đó, phương thức __str__ kế thừa của class Exception được sử dụng để hiển thị thông báo tương ứng khi SalaryNotInRangeError được raise.

Chúng ta cũng có thể tùy chỉnh chính phương thức __str__bằng cách ghi đè nó.

class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'{self.salary} -> {self.message}' salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Đầu ra của chương trình :

Enter salary amount: 2000
Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module> raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range

Kết Luận

Dưới đây mình đã giới thiệu với các bạn cách tùy chỉnh Exception trong Python và 1 số ví dụ cụ thể Nếu có bất kì thắc mắc gì hãy để lại comment ở phía dưới nhé.


Tham Khảo chi tiết hơn

https://www.programiz.com/python-programming/user-defined-exception

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập Trình Hướng Đối Tượng trong Python

Chào các bạn Trong bài này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó và một số các ví dụ. Các bạn cùng tìm hiểu trong bài viết của mình nhé.

0 0 35

- vừa được xem lúc

So sánh các đặc điểm của Dev khi làm việc tại Nhật và tại nước ngoài

Một bài viết gần đây trên Blog Qiita của một kỹ sư Nhật Bản đã có thâm niên làm việc lâu năm với nhiều môi trường khác nhau được tổng kết lại. Chúng ta hãy cùng đọc qua để xem tác giả có suy nghĩ như thế nào về các Dev trên thế giới nhé.

0 0 26

- vừa được xem lúc

Introductory knowledge of Internet of Things (IoT)

IoT (Internet of Things) là một hệ thống phân tích và tự động hóa tiên tiến khai thác công nghệ mạng, cảm biến, big data và trí tuệ nhân tạo để cung cấp các hệ thống hoàn chỉnh cho một sản phẩm hoặc dịch vụ. Các hệ thống này cho phép tính minh bạch, kiểm soát và hiệu suất cao hơn khi áp dụng cho bất

0 0 32

- vừa được xem lúc

Kiểm thử khả năng tiếp cận

1. Kiểm tra khả năng tiếp cận là gì. Nó là một tập hợp con của Kiểm tra khả năng sử dụng. Phần mềm nhận dạng giọng nói: Nó sẽ chuyển đổi từ được nói thành văn bản, dùng làm đầu vào cho máy tính.

0 0 32

- vừa được xem lúc

Introductory knowledge of Artificial Intelligence

Kể từ khi phát minh ra máy tính và máy móc, khả năng thực hiện các nhiệm vụ khác nhau của chúng đã tăng lên theo cấp số nhân. Con người đã phát triển hệ thống máy tính trên quan điểm các lĩnh vực làm việc đa dạng, tốc độ ngày càng tăng và kích thước ngày càng giảm theo thời gian.

0 0 19

- vừa được xem lúc

Kỹ năng quản lý dự án để thành công trong công việc

Trong lĩnh vực quản lý dự án, việc chọn được người giao nhiệm vụ thực hiện quản lý dự án không dễ. Người lãnh đạo được chọn phải có một tập hợp các kỹ năng và năng lực quản lý dự án chuyên nghiệp vượt trội.

0 0 27