Chủ yếu có ba loại lỗi có thể phân biệt được trong Python. lỗi cú pháp, ngoại lệ và lỗi logic
- Lỗi cú pháp tương tự như lỗi ngữ pháp hoặc lỗi chính tả trong Ngôn ngữ. Nếu có lỗi như vậy trong mã của bạn, Python không thể bắt đầu thực thi mã của bạn. Bạn nhận được một thông báo lỗi rõ ràng cho biết lỗi gì và cần sửa lỗi gì. Do đó, nó là loại lỗi dễ dàng nhất mà bạn có thể sửa chữa
- Thiếu ký hiệu [chẳng hạn như dấu phẩy, dấu ngoặc, dấu hai chấm], viết sai từ khóa, thụt lề không chính xác là những lỗi cú pháp phổ biến trong Python
- Các ngoại lệ có thể xảy ra trong các khối mã đúng cú pháp trong thời gian chạy. Khi Python không thể thực thi hành động được yêu cầu, nó sẽ chấm dứt mã và đưa ra thông báo lỗi
- Cố gắng đọc từ một tệp không tồn tại, thực hiện các thao tác với các loại biến không tương thích, chia một số cho 0 là những ngoại lệ phổ biến gây ra lỗi trong Python
- Chúng ta phải loại bỏ các lỗi cú pháp để chạy mã Python của mình, trong khi các ngoại lệ có thể được xử lý trong thời gian chạy
- Lỗi logic là lỗi khó sửa nhất vì chúng không làm hỏng mã của bạn và bạn không nhận được bất kỳ thông báo lỗi nào
- Nếu bạn có lỗi logic, mã của bạn không chạy như bạn mong đợi
- Sử dụng sai tên biến, code không phản ánh đúng logic thuật toán, mắc lỗi toán tử boolean sẽ dẫn đến lỗi logic
# Syntax Error-1: Misusing the Assignment Operator
len["data"] = 4
Output:
File "ErrorsAndExceptions.py", line 1
len["data"] = 4
SyntaxError: can't assign to function call# Syntax Error-2: Python Keyword Misuse
fr k in range[10]:
print[k]
Output:
File "ErrorsAndExceptions.py", line 4
fr k in range[10]:
^
SyntaxError: invalid syntax# Exception-1: ZeroDivisionError
print [5/0]
Output:
Traceback [most recent call last]:
File "ErrorsAndExceptions.py", line 12, in
print [5/0]
ZeroDivisionError: integer division or modulo by zero# Exception-2: TypeError
print ['4' + 4]
Output:
Traceback [most recent call last]:
File "ErrorsAndExceptions.py", line 10, in
print ['4' + 4]
TypeError: cannot concatenate 'str' and 'int' objects
Khi mã của bạn có lỗi cú pháp, Python sẽ dừng và phát hiện lỗi bằng cách cung cấp vị trí lỗi trong mã của bạn và định nghĩa lỗi rõ ràng
# Syntax Error-1: Misusing the Assignment Operator
len["data"] = 4
Output:
File "ErrorsAndExceptions.py", line 1
len["data"] = 4
SyntaxError: can't assign to function call
Bạn cần sửa lỗi cú pháp để chạy mã của mình
len["data"] == 4
Output:
True
Xử lý ngoại lệMục đích chính của việc xử lý ngoại lệ là ngăn chặn các lỗi tiềm ẩn và các điểm dừng không kiểm soát được
Chúng ta có thể bắt và xử lý một ngoại lệ bằng khối thử ngoại trừ
- khối thử chứa mã được theo dõi cho các trường hợp ngoại lệ
- khối ngoại trừ chứa những việc cần làm nếu một ngoại lệ cụ thể xảy ra. Nếu không có ngoại lệ nào xảy ra thì phần này được bỏ qua và câu lệnh thử ngoại trừ được kết thúc
- Nếu ngoại lệ được đưa ra khớp với từ được chỉ định trong từ khóa except, mã bên trong khối ngoại trừ được thực thi để xử lý ngoại lệ
- Bạn có thể bắt bất kỳ ngoại lệ nào nếu bạn không chỉ định bất kỳ loại ngoại lệ nào trong từ khóa except
- thử thực thi khối bị chấm dứt khi ngoại lệ đầu tiên xảy ra
- khối try-ngoại trừ có thể có nhiều hơn một khối ngoại trừ để xử lý một số loại ngoại lệ khác nhau
- Khối khác tùy chọn chỉ được thực thi nếu không có ngoại lệ xảy ra trong khối thử. Nếu có bất kỳ ngoại lệ nào được đưa ra, khối lệnh khác sẽ không được thực thi
- Khối cuối cùng tùy chọn được sử dụng để làm sạch mã. Khối này luôn được thực hiện
try:
#code to monitor
print [5/0]#this code will not be executed
#as above line raises a ZeroDivisionError
print ["this code will not be executed"]except ZeroDivisionError as e:
#code to handle the exception when it occurs
print[e]
print["OPPS"]else:
print["try block executed if there is no error"]finally:
print["finally block is always executed"]Output:
integer division or modulo by zero
OPPS
finally block is always executed
Ảnh của Serenity Mitchell trên UnsplashRaising Exceptions
Nếu một điều kiện cụ thể xảy ra, bạn có thể tăng ngoại lệ theo cách thủ công bằng từ khóa tăng
student_age = -4if student_age < 2:Xác định ngoại lệ tùy chỉnh
raise Exception["Sorry, student age cannot be lower than 2"]Output:
Traceback [most recent call last]:
File "ErrorsAndExceptions.py", line 49, in
raise Exception["Sorry, student age cannot be lower than 2"]
Exception: Sorry, student age cannot be lower than 2
Chúng tôi có thể xác định các loại ngoại lệ của riêng mình nếu chúng tôi muốn có nhiều quyền kiểm soát hơn đối với những gì sẽ xảy ra trong các điều kiện cụ thể
Để làm được điều này, chúng ta kế thừa từ lớp Exception
class InvalidStudentAgeException[Exception]:"""Exception for errors in the student age
Attributes:
student_age -- student_age that we monitor
error_message -- explanation of the error
"""def __init__[self, student_age, error_message="Student age should
be in 2-10 range"]:self.student_age = student_age
self.error_message = error_message
super[].__init__[self.error_message]student_age = int[input["Enter Student age: "]]if not 1 < student_age < 11:
raise InvalidStudentAgeException[student_age]Output:
Enter Student age: 54
Traceback [most recent call last]:
File "ErrorsAndExceptions.py", line 68, in
raise InvalidStudentAgeException[student_age]
__main__.InvalidStudentAgeException: Student age should be in 2-10 range: 54 is not a valid age
Ở trên, chúng tôi ghi đè hàm tạo của lớp cơ sở Ngoại lệ để sử dụng các đối số tùy chỉnh của riêng chúng tôi student_age và error_message. Với việc sử dụng super[]. __init__[bản thân. error_message], chúng ta khởi tạo lớp cơ sở, Exception, đối số giúp chúng ta hiển thị thông báo lỗi