HomeLập trìnhPythonCách xử lý...

Cách xử lý lỗi trong Python – thử, ngoại trừ, khác và cuối cùng Giải thích từ khóa


“Thật khó để tìm ra lỗi trong mã của bạn khi bạn đang tìm kiếm nó; thậm chí còn khó hơn khi bạn cho rằng mã của mình không có lỗi.”
– Steve McConnell

Lỗi là điều không thể tránh khỏi trong cuộc sống của một lập trình viên. Trên thực tế, trong khi viết chương trình, lỗi có thể thực sự hữu ích trong việc xác định lỗi logic và lỗi cú pháp trong mã của bạn.

Tuy nhiên, nếu bạn có thể lường trước một lỗi trong một tập hợp các dòng mã cụ thể trước khi thực thi, thì bạn có thể xử lý các lỗi đó và làm cho mã không có lỗi.

Tại sao xử lý lỗi lại quan trọng

Xử lý hoặc xử lý các lỗi mà bạn biết sẽ giúp mã chạy và thực thi trơn tru mà không bị gián đoạn. Nếu xảy ra lỗi trong bất kỳ dòng mã nào, việc xử lý lỗi sẽ xử lý chúng và sau đó mã sẽ tiếp tục thực thi.

Hãy lấy một ví dụ và hiểu tại sao chúng ta cần xử lý lỗi:

a = 12
b = 6
result = a/b
print(result)
print("I have reached the end of the line")
Chương trình không có lỗi

Từ đoạn mã trên, bạn mong đợi điều gì?. Vâng, các result in biến 2.0 và trên dòng tiếp theo, bảng điều khiển in I have reached the end of the line. Đó là những gì chúng tôi đang ngoại trừ.

Đọc thêm  Hướng dẫn từ điển Python – Cách lặp lại, sao chép và hợp nhất từ ​​điển trong Python 3.9

Hãy thay đổi giá trị của b từ b = 6 đến b = 0 và chạy.

1. a = 12
2. b = 0
3. result = a/b
4. print(result)
5. print("I have reached the end of the line")
Chương trình có lỗi

Khi mã này được thực thi, chúng tôi sẽ gặp lỗi như sau:

2
Thông báo lỗi hiển thị khi b được đặt thành 0

Mã không in result giá trị và nó cũng không in I have reached the end of the line

Các thông báo lỗi trên hiển thị division by zerocó nghĩa là nếu chúng ta cố gắng chia bất kỳ số nào cho chúng ta sẽ gặp lỗi này.

Vấn đề là trong dòng 3. Mặc dù mã không in result giá trị, nó nên đã được in I have reached the end of the line. Nhưng, nó đã không – tại sao?

Chà, bởi vì trình thông dịch Python dừng ở dòng 3 khi a đã chia cho . Tại thời điểm này, nó đã báo lỗi trong bảng điều khiển và thoát khỏi mã.

Một trong những giải pháp ngây thơ để giải quyết vấn đề này có thể là mã hóa cứng các giá trị. Nếu các giá trị của ab được mã hóa cứng, thì việc chạy mã sẽ giải quyết được lỗi này ở một mức độ nào đó.

Nhưng vấn đề lớn khác có thể phát sinh là khi người dùng muốn đưa ra các giá trị của ab tại thời điểm thực hiện.

a = int(input())
b = int(input())
result = a/b
print(result)
print("I have reached the end of the line")
giá trị của a và b được lấy từ người dùng

Tại thời điểm này, có khả năng cao là người dùng sẽ đưa ra làm đầu vào cho b. Để xử lý loại lỗi dự kiến ​​này, chúng tôi sẽ sử dụng một số phương pháp xử lý lỗi nhất định để tránh làm gián đoạn luồng thực thi (mặc dù người dùng có thể cung cấp bất kỳ thông tin nhập không hợp lệ nào như làm đầu vào cho b).

Đọc thêm  Cách định dạng chuỗi trong Python

Cách sử dụng Thử và loại trừ từ khóa trong Python

Bất kỳ dòng mã nào dễ bị lỗi hơn được giữ trong try chặn. Nếu có bất kỳ lỗi nào xảy ra, thì except block sẽ xử lý các lỗi đó.

Cấu trúc mã trông giống như thế này:

try:
   code that may/may not produce errors
except:
   when error arises, then this block of code exceutes.
   Otherwise, this block of code doesn't exceute
    
Mã Cấu trúc của từ khóa thử/ngoại trừ

Hãy quay lại ví dụ tiêu chuẩn mà chúng ta đã thảo luận. Chúng tôi sẽ xử lý division by zero vấn đề sử dụng try/except khối.

Hãy chèn các dòng mã có khả năng tạo ra lỗi cao. Trong trường hợp của chúng tôi, dòng 1-4 mã của chúng tôi có khả năng tạo ra lỗi cao. Vì vậy, chúng tôi đặt bốn dòng này trong try chặn:

try:
  a = int(input())
  b = int(input())
  result = a/b
  print(result)
except:
  print("We caught an error")
 
print("I have reached the end of the line")
Thử và khối Ngoại trừ cho bài toán chia hết

Bây giờ, khi chúng ta cho b một giá trị của , một lỗi xảy ra. Nên except khối thực thi và trình thông dịch in We caught an error và ra khỏi khối ngoại trừ và tiếp tục in I have reached the end of the line.

Mặt khác, khi chúng ta cho b một giá trị khác không, sau đó chúng tôi in result giá trị. Mã ra khỏi khối thử và tiếp tục in I have reached the end of the line.

Trong cả hai trường hợp, chúng tôi có thể thực thi cho đến dòng mã cuối cùng mà không bị gián đoạn.

Đọc thêm  Cách thiết lập môi trường ảo trong Python – Và tại sao nó lại hữu ích

Ngoài thử và ngoại trừ, điều khá quan trọng là phải hiểu elsefinally Từ khóa đi kèm với tryexcept.

Các else khối mã xuất hiện sau tryexcept chặn và thực thi khi không có lỗi nào xuất hiện từ try khối mã. Tương tự như vậy, các finally khối mã xuất hiện sau else chặn và thực thi cho dù có xảy ra lỗi hay không – khối này chắc chắn sẽ thực thi.

Bây giờ bạn đã hiểu làm thế nào các try, except, elsefinally các khối mã hoạt động, thứ tự dòng chảy sẽ là:

try:
   code that may/may not produce errors

except:
   when error arises, then this block of code exceutes

else:
   when error doesn't arise, then this block of code exceutes

finally:
   This block will exceute whether error occurs or not.
Cấu trúc mã của Khối từ khóa xử lý lỗi

Khi áp dụng cấu trúc tương tự cho bài toán chia số, ta có:

try:
  a = int(input())
  b = int(input())
  result = a/b
  print(result)

except:
   print("We caught an error")

else:
   print("Hurray, we don't have any errors")

finally:
   print("I have reached the end of the line")
Mã Cấu trúc bài toán chia số sau Khối từ khóa Xử lý lỗi

Khi nào b được gán , sau đó chúng tôi nhận được một lỗi. Vì vậy, khối except thực thi và in We caught an Error và cuối cùng khối mã thực thi và in I have reached the end of the line.

55
Luồng thực thi mã khi xảy ra lỗi

Mặt khác, nếu b được 6 ví dụ (hoặc bất kỳ giá trị khác không), sau đó chúng tôi chia a giá trị bằng 6 và lưu trữ nó trong result Biến đổi. Mã này sau đó in result giá trị.

Sau đó, else khối thực thi và in Hurray, we don't have any errors và cuối cùng khối mã thực thi và in I have reached the end of the line.

56
Luồng thực thi mã khi không có lỗi phát sinh

Tóm lược

Bây giờ, tôi hy vọng bạn đã hiểu cách triển khai xử lý lỗi trong Python để phát hiện các lỗi tiềm ẩn với try/except khối.

Bạn cũng đã học cách sử dụng elsefinally các khối mã được liên kết với các phương pháp xử lý lỗi này.

Lập trình vui vẻ…



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status