Python có thoát ngoại lệ không?
Các ứng dụng phần mềm không phải lúc nào cũng chạy hoàn hảo. Mặc dù gỡ lỗi chuyên sâu và nhiều cấp độ thử nghiệm, các ứng dụng vẫn bị lỗi. Dữ liệu xấu, kết nối mạng bị hỏng, cơ sở dữ liệu bị hỏng, áp lực bộ nhớ và đầu vào không mong muốn của người dùng đều có thể ngăn ứng dụng hoạt động bình thường. Khi một sự kiện như vậy xảy ra và ứng dụng không thể tiếp tục hoạt động bình thường, đây được gọi là ngoại lệ. Và công việc của ứng dụng của bạn—và công việc của bạn với tư cách là một lập trình viên—là nắm bắt và xử lý các ngoại lệ này một cách khéo léo để ứng dụng của bạn tiếp tục hoạt động Show
Cài đặt SDK Python để xác định và sửa lỗi ngoại lệ Ngoại lệ Python là gì?Các ngoại lệ trong các ứng dụng Python có thể xảy ra vì nhiều lý do đã nêu ở trên và hơn thế nữa; . Là nhà phát triển Python, bạn cần suy nghĩ về các tình huống ngoại lệ có thể xảy ra và bao gồm việc xử lý lỗi trong mã của mình May mắn thay, Python đi kèm với một khung xử lý lỗi mạnh mẽ. Sử dụng xử lý ngoại lệ có cấu trúc và một tập hợp các ngoại lệ được xác định trước, các chương trình Python có thể xác định loại lỗi trong thời gian chạy và hành động tương ứng. Chúng có thể bao gồm các hành động như đi theo đường dẫn thay thế, sử dụng giá trị mặc định hoặc nhắc nhập chính xác Bài viết này sẽ chỉ cho bạn cách tạo ngoại lệ trong mã Python của bạn và cách giải quyết các ngoại lệ
Sự khác biệt giữa Lỗi cú pháp Python và Ngoại lệ PythonTrước khi tìm hiểu sâu, điều quan trọng là phải hiểu hai loại điều kiện không mong muốn trong lập trình Python—lỗi cú pháp và ngoại lệ Ngoại lệ lỗi cú pháp xảy ra khi mã không phù hợp với từ khóa Python, kiểu đặt tên hoặc cấu trúc lập trình. Trình thông dịch nhìn thấy cú pháp không hợp lệ trong giai đoạn phân tích cú pháp của nó và đưa ra một ngoại lệ SyntaxError. Chương trình dừng và lỗi tại điểm xảy ra lỗi cú pháp. Đó là lý do lỗi cú pháp là ngoại lệ không thể xử lý Đây là một khối mã ví dụ có lỗi cú pháp (lưu ý không có dấu hai chấm sau điều kiện “nếu” trong ngoặc đơn)
Thông dịch viên nhận lỗi và chỉ ra số dòng. Lưu ý cách nó không tiếp tục sau lỗi cú pháp
Mặt khác, một ngoại lệ xảy ra khi mã không có lỗi cú pháp nhưng gặp các tình huống lỗi khác. Những điều kiện này có thể được xử lý trong mã—trong chức năng hiện tại hoặc trong ngăn xếp cuộc gọi. Theo nghĩa này, ngoại lệ không gây tử vong. Một chương trình Python có thể tiếp tục chạy nếu nó xử lý tốt ngoại lệ Đây là một ví dụ về mã Python không có bất kỳ lỗi cú pháp nào. Nó đang cố chạy một phép toán số học trên hai biến chuỗi
Ngoại lệ được đưa ra là TypeError
Python ném ngoại lệ TypeError khi có kiểu dữ liệu sai. Tương tự như TypeError, có một số ngoại lệ tích hợp sẵn như
Bạn có thể tham khảo danh sách đầy đủ các trường hợp ngoại lệ
Cách ném ngoại lệ trong PythonĐôi khi bạn muốn Python đưa ra một ngoại lệ tùy chỉnh để xử lý lỗi. Bạn có thể làm điều này bằng cách kiểm tra một điều kiện và đưa ra ngoại lệ, nếu điều kiện là True. Ngoại lệ được nêu ra thường cảnh báo người dùng hoặc ứng dụng gọi điện Bạn sử dụng từ khóa “raise” để ném ngoại lệ Python theo cách thủ công. Bạn cũng có thể thêm một thông báo để mô tả ngoại lệ Đây là một ví dụ đơn giản. Giả sử bạn muốn người dùng nhập ngày. Ngày phải là hôm nay hoặc trong tương lai. Nếu người dùng nhập một ngày trong quá khứ, chương trình sẽ đưa ra một ngoại lệ Ví dụ về ngoại lệ ném Python
Để kiểm tra mã, chúng tôi nhập ngày cũ hơn ngày hiện tại. Điều kiện “nếu” đánh giá là đúng và đưa ra ngoại lệ
Thay vì đưa ra một ngoại lệ chung chung, chúng ta cũng có thể chỉ định một loại cho nó
Với một đầu vào tương tự như trước đây, Python sẽ ném ngoại lệ này
Sử dụng AssertionError trong Ném ngoại lệ PythonMột cách khác để đưa ra một ngoại lệ là sử dụng khẳng định. Với khẳng định, bạn khẳng định một điều kiện là đúng trước khi chạy câu lệnh. Nếu điều kiện đánh giá là đúng, câu lệnh sẽ chạy và điều khiển tiếp tục đến câu lệnh tiếp theo. Tuy nhiên, nếu điều kiện đánh giá là sai, chương trình sẽ đưa ra lỗi AssertionError. Sơ đồ dưới đây cho thấy luồng logic Sử dụng AssertionError, chúng ta có thể viết lại đoạn mã ở phần cuối như thế này ________số 8_______Lưu ý cách chúng tôi đã xóa điều kiện “nếu” và hiện đang khẳng định rằng ngày được cung cấp lớn hơn hoặc bằng ngày hiện tại. Khi nhập một ngày cũ hơn, AssertionError hiển thị
Bắt ngoại lệ Python bằng Try-ExceptionBây giờ bạn đã hiểu cách ném ngoại lệ trong Python theo cách thủ công, đã đến lúc xem cách xử lý các ngoại lệ đó. Hầu hết các ngôn ngữ lập trình hiện đại đều sử dụng cấu trúc gọi là “try-catch” để xử lý ngoại lệ. Với Python, hình thức cơ bản của nó là “try-except”. Khối try-ngoại trừ trông như thế này Python Try Catch Ví dụ ngoại lệ 0Tại đây, luồng chương trình đi vào khối “thử”. Nếu có ngoại lệ, điều khiển sẽ nhảy tới mã trong khối “ngoại trừ”. Mã xử lý lỗi bạn đặt trong khối “ngoại trừ” tùy thuộc vào loại lỗi mà bạn cho rằng mã trong khối “thử” có thể gặp phải Đây là một ví dụ về “try-except” của Python (thường được gọi nhầm là “try-catch-Exception”). Giả sử chúng ta muốn mã của mình chỉ chạy nếu phiên bản Python là 3. Sử dụng một xác nhận đơn giản trong mã trông như thế này 1Nếu phiên bản Python không phải là 3, thông báo lỗi sẽ như thế này 2Thay vì để chương trình thất bại với một ngoại lệ chưa được xử lý và hiển thị thông báo lỗi xấu xí, chúng ta có thể sử dụng khối try-ngoại trừ để thoát một cách dễ dàng 3Bây giờ, thông báo lỗi sạch hơn nhiều 4Từ khóa “ngoại trừ” trong cấu trúc cũng chấp nhận loại lỗi bạn muốn xử lý. Để minh họa điều này, hãy quay lại tập lệnh ngày của chúng ta từ phần trước. Trong tập lệnh đó, chúng tôi giả định rằng người dùng sẽ nhập ngày ở định dạng “YYYY-MM-DD”. Tuy nhiên, với tư cách là nhà phát triển, bạn nên xử lý bất kỳ loại dữ liệu sai sót nào thay vì phụ thuộc vào người dùng. Ví dụ, một số tình huống ngoại lệ có thể được
Để giải quyết tất cả các điều kiện này, chúng ta có thể viết lại khối mã như hình bên dưới. Điều này sẽ bắt bất kỳ ngoại lệ ValueError nào được nêu ra khi đáp ứng bất kỳ điều kiện nào ở trên 5Trong trường hợp này, chương trình sẽ thoát nhanh nếu ngày không được định dạng chính xác Bạn có thể bao gồm nhiều khối “ngoại trừ” cho khối “thử” để bẫy các loại ngoại lệ khác nhau. Mỗi khối "ngoại trừ" sẽ giải quyết một loại lỗi cụ thể 6Đây là một ví dụ rất đơn giản 7Chúng tôi có thể kiểm tra chương trình này với các giá trị khác nhau 8
Bắt ngoại lệ Python bằng Try-Exception-ElsePhần tử tiếp theo trong cấu trúc “try-except” của Python là “else” Python Thử ngoại trừ ví dụ khác 9Khối “else” chạy nếu không có ngoại lệ nào được đưa ra từ khối “try”. Nhìn vào cấu trúc mã ở trên, bạn có thể thấy cách xử lý ngoại lệ “else” trong Python hoạt động gần giống như cấu trúc “if-else” Để hiển thị cách hoạt động của “else”, chúng ta có thể sửa đổi một chút mã của tập lệnh số học từ phần trước. Nếu bạn nhìn vào tập lệnh, bạn sẽ thấy chúng tôi đã tính giá trị biến của “kết quả” bằng biểu thức số học. Thay vì đặt cái này vào khối “thử”, bạn có thể chuyển nó sang khối “khác”. Bằng cách đó, ngoại lệ sẽ chặn bất kỳ lỗi nào phát sinh trong khi chuyển đổi giá trị đầu vào thành số nguyên. Và nếu không có ngoại lệ, khối “else” sẽ thực hiện phép tính thực tế 0Sử dụng các số nguyên đơn giản làm giá trị đầu vào chạy mã khối “else” 1Và việc sử dụng dữ liệu sai như giá trị trống, số thập phân hoặc chuỗi khiến khối “ngoại trừ” tương ứng chạy và bỏ qua khối “khác” 2Tuy nhiên, vẫn có khả năng xảy ra các trường hợp ngoại lệ chưa được xử lý khi khối “else” chạy 3Như bạn có thể thấy, cả hai đầu vào đều là số nguyên (1 và 0) và khối “thử” chuyển đổi thành công chúng thành số nguyên. Khi khối “else” chạy, chúng ta thấy ngoại lệ Vậy làm thế nào để bạn xử lý các lỗi trong khối “else”? 4
Bắt ngoại lệ Python bằng Try-Except-Else-Cuối cùngCuối cùng, chúng ta có khối tùy chọn cuối cùng trong xử lý lỗi Python. Và nó được gọi theo nghĩa đen là “cuối cùng” Python Thử cuối cùng Ví dụ 5Khối “cuối cùng” chạy cho dù mã của khối “thử” có phát sinh ngoại lệ hay không. Nếu có ngoại lệ, mã trong khối “ngoại trừ” tương ứng sẽ chạy và sau đó mã trong khối “cuối cùng” sẽ chạy. Nếu không có ngoại lệ, mã trong khối “else” sẽ chạy (nếu có khối “else”), và sau đó mã trong khối “cuối cùng” sẽ chạy Vì mã trong khối “cuối cùng” luôn chạy, nên bạn muốn giữ mã “dọn sạch” của mình ở đây, chẳng hạn như
Đây là một ví dụ về việc sử dụng "cuối cùng" 6Ở đây, khối “thử” cố gắng mở một tệp để đọc. Nếu tệp không tồn tại, khối ngoại lệ sẽ hiển thị thông báo cảnh báo, tạo tệp và thêm giá trị tĩnh là “2” vào tệp. Nếu tệp tồn tại, khối “else” sẽ đọc dòng đầu tiên của nội dung và in ra. Cuối cùng, khối “cuối cùng” đóng tệp. Điều này xảy ra cho dù tệp ban đầu có tồn tại hay không Những gì chúng ta đã thảo luận cho đến nay có thể được tóm tắt trong sơ đồ dưới đây
Cách Rollbar có thể giúp ghi nhật ký và theo dõi lỗi PythonRollbar là một nền tảng cải tiến mã liên tục cho các nhóm phát triển phần mềm. Nó cung cấp một cách tự động để nắm bắt các lỗi Python và các bài kiểm tra không thành công trong thời gian thực từ tất cả các lớp ngăn xếp ứng dụng và trên tất cả các môi trường. Điều này cho phép tạo phản hồi chủ động và tự động đối với các lỗi ứng dụng. Sơ đồ dưới đây cho thấy Rollbar hoạt động như thế nào Rollbar hoạt động tự nhiên với nhiều ngôn ngữ lập trình và khung, bao gồm cả Python. Các nhà phát triển Python có thể cài đặt pyrollbar, SDK của Rollbar cho Python, sử dụng một công cụ như pip, nhập lớp Rollbar vào mã và gửi các ngoại lệ Python tới Rollbar. Đoạn mã dưới đây cho thấy nó dễ dàng như thế nào 7Theo dõi, phân tích và quản lý lỗi với RollbarQuản lý lỗi và ngoại lệ trong mã của bạn là một thách thức. Nó có thể làm cho việc triển khai mã sản xuất trở thành một trải nghiệm đáng sợ. Khả năng theo dõi, phân tích và quản lý lỗi trong thời gian thực có thể giúp bạn tiến hành một cách tự tin hơn. Rollbar tự động theo dõi và xử lý lỗi, giúp việc sửa lỗi trở nên dễ dàng hơn bao giờ hết. Thử nó ngay hôm nay Python có thoát sau ngoại lệ không?Một chương trình Python sẽ kết thúc ngay khi gặp lỗi . Trong Python, lỗi có thể là lỗi cú pháp hoặc ngoại lệ.
Ngoại lệ có dừng thực thi không?Khi ném ngoại lệ, phương thức sẽ dừng thực thi ngay sau câu lệnh "ném" . Bất kỳ câu lệnh nào sau câu lệnh "ném" đều không được thực thi.
Điều gì xảy ra sau ngoại lệ trong Python?Nếu một ngoại lệ xảy ra trong khi thực hiện mệnh đề try, phần còn lại của mệnh đề sẽ bị bỏ qua. Sau đó, nếu loại của nó khớp với ngoại lệ được đặt tên theo từ khóa ngoại trừ, mệnh đề ngoại trừ được thực thi và sau đó quá trình thực thi tiếp tục sau khối thử/ngoại trừ .
Mã thoát mặc định trên ngoại lệ trong Python là gì?0 nếu trình thông dịch thoát bình thường (i. e. , không có ngoại lệ), 1 nếu trình thông dịch thoát do có ngoại lệ hoặc 2 nếu danh sách tham số không đại diện cho một dòng lệnh Python hợp lệ. |