Làm thế nào để bạn xử lý tất cả các ngoại lệ trong python?
Rất hay gặp lỗi trong quá trình thực thi chương trình. Hai loại lỗi phổ biến mà bạn có thể phải xử lý là lỗi cú pháp và ngoại lệ. Lỗi cú pháp xảy ra khi bạn nhập sai mã. Trong những trường hợp như vậy, dòng sai được trình phân tích cú pháp lặp lại với một mũi tên chỉ đến vị trí sớm nhất mà lỗi được phát hiện Show Ngoại lệ khác với lỗi cú pháp. Chúng xảy ra khi có điều gì đó bất ngờ xảy ra trong quá trình thực thi chương trình. Ví dụ: giả sử bạn đang yêu cầu người dùng nhập một số để thực hiện phép chia. Bây giờ, nếu người dùng nhập một chuỗi thay vì một số và bạn cố gắng chia một số cho đầu vào đã cho, chương trình sẽ xuất ra một giá trị keep_asking = True98 Khi bạn không xử lý đúng các trường hợp ngoại lệ, chương trình sẽ đột ngột thoát ra vì không biết phải làm gì trong những trường hợp như vậy. Đoạn mã sau là một ví dụ như vậy 1 keep_asking = True 2 3 while keep_asking: 4 x = int(input("Enter a number: ")) 5 print("Dividing 50 by", x,"will give you :", 50/x) Miễn là bạn đang nhập một giá trị đầu vào tích phân, chương trình sẽ hoạt động chính xác. Tuy nhiên, ngay khi bạn nhập một chuỗi hoặc thậm chí một số thập phân làm đầu vào, bạn sẽ nhận được một ngoại lệ keep_asking = True99 1 keep_asking = True0_______3_______ keep_asking = True2_______4_______ keep_asking = True4_______6_______0_______6 5 keep_asking = True8 keep_asking = True9 20 Từ truy nguyên ở trên, chúng ta có thể thấy rằng người dùng nhập một chuỗi 200 thay vì một số, dẫn đến ______0_______99. Truy nguyên cũng cho chúng ta thấy vị trí chính xác của lỗi, tôi. e. dòng 4, cho phép chúng tôi quay lại mã và sửa nó Trong hướng dẫn này, bạn sẽ học cách xử lý đúng cách và đưa ra các ngoại lệ trong Python Một số ngoại lệ phổ biếnDưới đây là một số ngoại lệ cơ bản mà bạn có thể gặp phải khi viết chương trình. Bạn có thể đọc về nhiều hơn nữa trên trang web chính thức
Cũng giống như các tên ở trên, hầu hết các trường hợp ngoại lệ đều có tên dễ hiểu Xử lý một ngoại lệĐoạn mã ở đầu bài viết yêu cầu người dùng nhập một số nguyên làm đầu vào. Nếu người dùng không cung cấp đầu vào số nguyên, chương trình sẽ dừng thực thi và đưa ra một ngoại lệ lỗi giá trị. Trong phần này, chúng tôi sẽ viết một số mã để cho người dùng biết rằng đầu vào của họ không phải là một giá trị số nguyên hợp lệ Xử lý ngoại lệ cho phép các chương trình của chúng tôi tiếp tục thực thi ngay cả khi xảy ra lỗi Mệnh đề Try-ExceptionBước đầu tiên của quy trình là bao gồm mã mà bạn nghĩ có thể đưa ra ngoại lệ bên trong mệnh đề 209. Bước tiếp theo là sử dụng từ khóa 210 để xử lý ngoại lệ xảy ra trong đoạn mã trên. Mã sửa đổi cho đầu vào của người dùng sẽ giống như thế này 1________0____3_______ 3 while keep_asking: 4 27 53_______9 keep_asking = True9 31 32 33 34 35 Điều xảy ra ở đây là chương trình cố gắng thực thi mã bên trong mệnh đề 209. Nếu không có ngoại lệ nào được đưa ra, chương trình sẽ bỏ qua mệnh đề 210 và phần còn lại của mã thực thi bình thường. Nếu một ngoại lệ được đưa ra, chương trình sẽ bỏ qua mã còn lại bên trong mệnh đề 209 và loại ngoại lệ được so khớp với tên của ngoại lệ sau từ khóa 210. Trong trường hợp trùng khớp, mã bên trong mệnh đề 210 được thực thi trước, sau đó phần còn lại của mã sau mệnh đề 209 được thực thi bình thường Khi bạn nhập một số nguyên làm đầu vào, chương trình sẽ cung cấp cho bạn kết quả cuối cùng của phép chia. Khi một giá trị không tách rời được cung cấp, chương trình sẽ in một thông báo yêu cầu bạn thử nhập lại một số nguyên. Lưu ý rằng thời gian này, chương trình không thoát đột ngột khi bạn nhập dữ liệu không hợp lệ Nếu bạn nhập một số không phải là số nguyên, bạn sẽ nhận được đầu ra sau trên thiết bị đầu cuối của mình 1 37_______3_______ 39_______4_______ while keep_asking:1 Bạn có thể có nhiều mệnh đề 210 để xử lý các trường hợp ngoại lệ khác nhau. Xin lưu ý rằng những trình xử lý này sẽ chỉ xử lý các trường hợp ngoại lệ xảy ra trong mệnh đề 209 tương ứng. Họ sẽ không xử lý bất kỳ ngoại lệ nào được nêu trong các trình xử lý ngoại lệ khác Bạn cũng có thể xử lý nhiều ngoại lệ bằng cách sử dụng một mệnh đề 210 duy nhất bằng cách chuyển các ngoại lệ này sang mệnh đề dưới dạng 220 1 while keep_asking:3_______3_______ while keep_asking:5_______4__________ while keep_asking:7 Cuối cùng, bạn cũng có thể bỏ tên của ngoại lệ sau từ khóa 210. Điều này thường không được khuyến nghị vì mã bây giờ sẽ bắt tất cả các ngoại lệ và xử lý chúng theo cùng một cách. Điều này không tối ưu vì bạn sẽ xử lý một ngoại lệ keep_asking = True98 giống như cách bạn đã xử lý một ngoại lệ 223. Khi xử lý các trường hợp ngoại lệ, tốt hơn là bạn nên càng cụ thể càng tốt và chỉ nắm bắt những gì bạn có thể xử lý Một cách có thể sử dụng để nắm bắt tất cả các ngoại lệ là in đúng lỗi ngoại lệ trên màn hình, như đoạn mã sau 1 while keep_asking:9_______3__________ 41_______4_______ 4___ 44 56_______6 keep_asking = True9 48 32 x = int(input("Enter a number: "))0 34 x = int(input("Enter a number: "))2 x = int(input("Enter a number: "))3 x = int(input("Enter a number: "))4 Sử dụng khoản ElseBạn cũng có thể sử dụng mệnh đề 224 trong câu lệnh 225. Mệnh đề 224 có nghĩa là chứa mã cần được thực thi nếu mệnh đề 209 không đưa ra bất kỳ ngoại lệ nào. Điều này có thể hữu ích để đảm bảo rằng bạn không thêm bất kỳ mã nào vào khối 209 có ngoại lệ mà bạn không có ý định bắt. Một điều đáng nói là nếu bạn quyết định sử dụng mệnh đề 224, bạn nên đưa nó vào sau tất cả các mệnh đề 210 nhưng trước khối 231 Trong trường hợp của chúng tôi, chúng tôi có thể di chuyển dòng in kết quả phép chia của chúng tôi bên trong khối 224 1________0____3_______ 3 while keep_asking:___ 4 27 53_______9 keep_asking = True9 33 32 57 34 59 x = int(input("Enter a number: "))3 31 Dọn dẹp Sử dụng Mệnh đề Cuối cùngGiả sử bạn đã viết một số mã bên trong khối 209 được cho là thực hiện một tác vụ bằng cách sử dụng một lượng lớn tài nguyên. Điều quan trọng là phải trả lại các tài nguyên đó khi bạn sử dụng xong chúng. Điều này có thể dễ dàng đạt được bằng cách sử dụng mệnh đề 231 Mã bên trong mệnh đề 231 luôn được thực thi bất kể khối 209 có đưa ra ngoại lệ hay không. Bạn có thể xác minh điều này bằng cách chạy đoạn mã sau 1________0____3_______ 3 while keep_asking: 4 27 53_______9 keep_asking = True9 33 32 57 34 59 x = int(input("Enter a number: "))3 31 19 keep_asking = True00 keep_asking = True01_______0_______02 Nếu bất kỳ mệnh đề 210 nào mà bạn đã chỉ định không xử lý ngoại lệ được đưa ra, thì ngoại lệ tương tự sẽ được đưa ra lại sau khi thực thi mã bên trong khối 231 Một ví dụ phức tạp hơnTrong phần này, chúng tôi sẽ viết một chương trình để xử lý nhiều ngoại lệ. Cũng giống như các ví dụ trước, chúng ta sẽ thực hiện một số phép toán. Tuy nhiên, lần này chúng tôi sẽ lấy đầu vào từ một danh sách Đoạn mã sau kiểm tra hai trường hợp ngoại lệ, keep_asking = True98 và keep_asking = True99. Khối 224 được sử dụng để in giai thừa. Bạn có thể thấy ở đầu ra rằng mã này chỉ được thực thi khi không có ngoại lệ nào được đưa ra 1 while keep_asking:9 2 3 keep_asking = True07 4 5 keep_asking = True10 keep_asking = True9 27 32 keep_asking = True14 34 keep_asking = True16 x = int(input("Enter a number: "))3 keep_asking = True18 19 33 keep_asking = True01 keep_asking = True22 keep_asking = True23 59 keep_asking = True25 keep_asking = True26 keep_asking = True27 keep_asking = True00 keep_asking = True29 keep_asking = True30 Đoạn mã trên tạo ra đầu ra sau 1 keep_asking = True32_______3_______ keep_asking = True34 3___ 4 keep_asking = True37 50_______34 keep_asking = True9 32 keep_asking = True42 34 keep_asking = True34 x = int(input("Enter a number: "))3 19 keep_asking = True47 keep_asking = True01_______0_______34 Một điều đáng chú ý nữa là mã bên trong mệnh đề 231 được thực thi cho mỗi mục trong danh sách Ngoại lệ do người dùng xác địnhĐôi khi, bạn muốn đưa ra các ngoại lệ mà Python không cung cấp. Các ngoại lệ do người dùng xác định giúp chương trình dễ đọc hơn. Ví dụ: giả sử bạn đang thiết kế một phần của chương trình kiểm tra xem mã phiếu giảm giá do người dùng gửi có hợp lệ không. Sau đó, bạn sẽ cần tạo một ngoại lệ tùy chỉnh cho mục đích đó Các ngoại lệ tùy chỉnh kế thừa từ lớp cơ sở Python 243 như sau 1 keep_asking = True51____3_______ keep_asking = True53 Các ngoại lệ cũng được định nghĩa theo cách tương tự như các ngoại lệ của Python bằng cách kết thúc bằng 244, mặc dù đây là tùy chọn Khi 243 được xác định, bạn có thể sử dụng nó trong chương trình của mình như sau 1 keep_asking = True55_______3_______ keep_asking = True57_______4__________ keep_asking = True59 40_______61 50_______63 keep_asking = True9 keep_asking = True65 Trong mã ở trên, chúng tôi yêu cầu người dùng cung cấp mã phiếu giảm giá và nếu mã phiếu giảm giá mà họ cung cấp không có trong 246, thì một 247 sẽ xuất hiện 1 keep_asking = True67_______3_______ keep_asking = True4_______4_______ keep_asking = True71 40_______73 5 keep_asking = True75 Để tùy chỉnh lỗi hơn nữa, bạn có thể xác định một thông báo thân thiện hơn với người dùng 1 keep_asking = True51 2 keep_asking = True79_______4__________ keep_asking = True81 40_______83 50_______85 keep_asking = True9 keep_asking = True87 Bây giờ nếu bạn chạy lại chương trình, người dùng sẽ nhận được thông báo lỗi thân thiện hơn 1 keep_asking = True89 2 keep_asking = True4_______4_______ keep_asking = True93 4 keep_asking = True95 5 keep_asking = True97 Suy nghĩ cuối cùngTôi hy vọng hướng dẫn này đã giúp bạn hiểu cách xử lý ngoại lệ trong Python. Ngoài ra, đừng ngần ngại xem những gì chúng tôi có sẵn để bán và nghiên cứu trên thị trường Xử lý ngoại lệ đúng cách có thể rất hữu ích trong các trường hợp không thể thoát khỏi chương trình sau khi chương trình nhận được đầu vào không mong muốn. Nếu bạn có bất kỳ câu hỏi nào liên quan đến xử lý ngoại lệ trong Python, vui lòng cho tôi biết trên diễn đàn Học PythonTìm hiểu Python với hướng dẫn hướng dẫn Python hoàn chỉnh của chúng tôi, cho dù bạn mới bắt đầu hay bạn là một lập trình viên dày dặn đang tìm cách học các kỹ năng mới Bài đăng này đã được cập nhật với sự đóng góp từ Esther Vaati. Esther là nhà phát triển và viết phần mềm cho Envato Tuts+ |