Các lỗi trong loại 1 thường dễ sửa vì trình thông dịch Python đánh dấu vị trí lỗi khi cố gắng thực thi chương trình. Các lỗi cú pháp phổ biến bao gồm thiếu dấu hai chấm ở cuối dòng tiêu đề hoặc thiếu dấu ngoặc kép ở cuối chuỗi Show Các lỗi trong loại 2 có thể khó phát hiện hơn, vì có thể xảy ra là chúng chỉ xảy ra tại một thời điểm nhất định trong quá trình thực thi chương trình và chỉ trong một số trường hợp nhất định. Chương trình có thể hoạt động tốt trong hầu hết các tình huống, nhưng tạm dừng do lỗi trong một trường hợp cận biên cụ thể. Bây giờ chúng ta sẽ tập trung xử lý các loại lỗi này Xác thực đầu vàoNhiều lỗi xuất hiện trong quá trình thực thi chương trình liên quan đến đầu vào không hợp lệ. Một số ví dụ bao gồm
May mắn thay, lập trình viên chúng tôi có thể chuẩn bị cho hầu hết các lỗi. Hãy xem một chương trình hỏi tuổi của người dùng và đảm bảo rằng đó là một số có thể chấp nhận được (trong trường hợp này là từ 0 đến 150)
đầu ra mẫu Vui lòng nhập tuổi của bạn. 25 Đó là một độ tuổi tốt đầu ra mẫu Vui lòng nhập tuổi của bạn. -3 Đây không phải là độ tuổi hợp lệ Miễn là người dùng nhập một giá trị số nguyên, quá trình xác thực đầu vào của chúng tôi dường như hoạt động tốt. Nhưng nếu họ gõ vào một chuỗi thì sao? đầu ra mẫu Vui lòng nhập tuổi của bạn. hai mươi ba ValueError. chữ không hợp lệ cho int() với cơ số 10. 'hai mươi ba' Hàm 5 không thể phân tích cú pháp chuỗi đầu vào 0 dưới dạng giá trị số nguyên hợp lệ. Quá trình thực thi tạm dừng và thông báo lỗi trên được inngoại lệLỗi xảy ra trong khi chương trình đang chạy được gọi là ngoại lệ. Có thể chuẩn bị cho các trường hợp ngoại lệ và xử lý chúng để quá trình thực thi vẫn tiếp tục mặc dù chúng xảy ra Xử lý ngoại lệ trong Python được thực hiện bằng các câu lệnh 1 và 2. Ý tưởng là nếu thứ gì đó trong khối 1 gây ra ngoại lệ, Python sẽ kiểm tra xem có khối 2 tương ứng không. Nếu một khối như vậy tồn tại, nó sẽ được thực thi và chương trình sẽ tiếp tục như không có gì xảy raHãy thay đổi ví dụ trên để chương trình chuẩn bị cho ngoại lệ 5
đầu ra mẫu Vui lòng nhập tuổi của bạn. hai mươi ba Đây không phải là tuổi hợp lệ Chúng tôi có thể sử dụng khối 1 để gắn cờ rằng mã trong khối có thể gây ra lỗi. Trong câu lệnh 2 ngay sau khối, lỗi liên quan được đề cập. Trong ví dụ trên, chúng tôi chỉ đề cập đến một ngoại lệ 5. Nếu ngoại lệ có một số nguyên nhân khác, thì quá trình thực thi vẫn bị tạm dừng, bất chấp các khối 1 và 2Trong ví dụ trên, nếu bắt gặp lỗi, giá trị của 31 được đặt thành -1. Đây là một giá trị đầu vào không hợp lệ mà chúng tôi đã lập trình hành vi vì chương trình mong đợi tuổi của người dùng lớn hơn 0Trong ví dụ sau, chúng ta có một hàm 32, hàm này yêu cầu người dùng nhập một giá trị số nguyên, nhưng hàm này cũng được chuẩn bị cho trường hợp đầu vào không hợp lệ. Hàm tiếp tục yêu cầu số nguyên cho đến khi người dùng nhập giá trị đầu vào hợp lệ 3đầu ra mẫu Vui lòng nhập số nguyên. ba Dữ liệu nhập này không hợp lệ Vui lòng nhập một số nguyên. aybabtu Thông tin nhập này không hợp lệ Vui lòng nhập một số nguyên. 5 Cảm ơn bạn. 5 luỹ thừa của ba là 125 Đôi khi, chỉ cần bắt ngoại lệ với cấu trúc ngoại trừ thử mà không cần làm gì với chúng là đủ. Đó là, chúng ta có thể bỏ qua tình huống trong khối 2Nếu chúng ta thay đổi ví dụ trên để chúng ta chỉ chấp nhận các số nguyên nhỏ hơn 100, kết quả sẽ như thế này 7đầu ra mẫu Vui lòng nhập số nguyên. ba Dữ liệu nhập này không hợp lệ Vui lòng nhập một số nguyên. 1000 Dữ liệu nhập này không hợp lệ Vui lòng nhập số nguyên. 5 Cảm ơn bạn. 5 luỹ thừa của ba là 125 Bây giờ khối 2 chỉ chứa lệnh 35, lệnh này không làm gì cả. Python không cho phép các khối trống, vì vậy lệnh là cần thiếtĐang tải lỗi điển hìnhDưới đây là tuyển tập các lỗi điển hình mà bạn có thể sẽ gặp phải, cùng với một số tình huống mà chúng có thể xảy ra Giá trịError Lỗi này thường xuất hiện khi đối số được truyền cho một hàm không hợp lệ. Ví dụ: lệnh gọi hàm 36 gây ra lỗi, vì số thập phân luôn được phân tách bằng dấu chấm trong Python và ở đây chúng tôi có dấu phẩyLoạiLỗi Lỗi này xảy ra khi một giá trị không đúng loại. Ví dụ: lệnh gọi hàm 37 gây ra lỗi 38, vì hàm 39 yêu cầu giá trị có thể tính được độ dài, chẳng hạn như chuỗi hoặc danh sáchChỉ mụcLỗi Lỗi phổ biến này xảy ra khi cố gắng tham khảo một chỉ mục không tồn tại. Ví dụ, biểu thức 70 gây ra một 71, bởi vì chuỗi trong câu hỏi không có chỉ số 5ZeroDivisionLỗi Đúng như tên gọi, lỗi này xảy ra khi cố gắng chia cho 0, điều mà chúng ta biết từ toán học luôn là một ý tưởng tồi. Ví dụ: nếu chúng ta cố gắng xác định giá trị trung bình cộng của một danh sách có công thức 72, nhưng danh sách của chúng ta có độ dài bằng 0, lỗi này sẽ xảy raNgoại lệ trong xử lý tệp Một số lỗi phổ biến khi làm việc với tệp là FileNotFoundError (khi cố gắng truy cập tệp không tồn tại), io. UnsupportedOperation (khi cố gắng thực hiện thao tác trên một tệp không được chế độ mở tệp hỗ trợ) hoặc PermissionError (chương trình thiếu các quyền cần thiết để truy cập tệp) Xử lý nhiều ngoại lệ cùng một lúcCó thể có nhiều hơn một khối 2 được đính kèm với mỗi khối 1. Ví dụ: chương trình sau có thể xử lý cả 75 và 76 1Đôi khi không cần chỉ định lỗi mà chương trình chuẩn bị cho. Đặc biệt là khi xử lý các tệp, thường đủ để biết rằng đã xảy ra lỗi và thoát khỏi chương trình một cách an toàn. Không phải lúc nào cũng cần biết tại sao xảy ra lỗi. Nếu chúng ta cần bao gồm tất cả các trường hợp ngoại lệ có thể xảy ra, chúng ta có thể sử dụng khối 2 mà không chỉ định lỗi 3NB. câu lệnh 2 ở đây bao gồm tất cả các lỗi có thể xảy ra, ngay cả những lỗi do lỗi lập trình gây ra. Chỉ có các lỗi cú pháp sẽ không bị phát hiện bởi điều này, vì chúng ngăn không cho mã được thực thi ngay từ đầuVí dụ, chương trình sau sẽ luôn báo lỗi vì tên biến 79 được viết là 10 ở dòng thứ ba 7Một khối 2 có thể ẩn lỗi thực tế. vấn đề ở đây không phải do xử lý tệp như vậy mà do tên biến bị viết sai chính tả. Nếu không có khối 2, lỗi được đưa ra sẽ được hiển thị và nguyên nhân có thể được tìm thấy dễ dàng hơn. Do đó, tốt nhất là chỉ sử dụng các khối 2 được khai báo cụ thể cho một số loại lỗi nhất địnhvượt qua ngoại lệNếu việc thực thi một chức năng gây ra một ngoại lệ và ngoại lệ này không được xử lý, thì nó sẽ được chuyển sang phần mã được gọi là hàm đó, v.v. tiếp tục chuỗi lệnh gọi, cho đến khi nó đạt đến cấp độ chức năng chính. Nếu nó không được xử lý ở đó, thì việc thực thi chương trình sẽ tạm dừng và ngoại lệ thường được in ra để người dùng xem. Trong ví dụ sau, chúng ta có hàm 14. Nếu nó gây ra một ngoại lệ, điều này không được xử lý trong chính chức năng đó mà trong chức năng chính 2đầu ra mẫu Vui lòng nhập một số. ba Đã xảy ra sự cố Tăng ngoại lệBạn cũng có thể đưa ra các ngoại lệ bằng lệnh 15. Việc cố tình gây ra lỗi trong chương trình của bạn có vẻ là một ý tưởng kỳ quặc, nhưng trên thực tế, đây có thể là một cơ chế rất hữu ích.Chẳng hạn, đôi khi có thể đưa ra lỗi khi phát hiện các tham số không hợp lệ. Cho đến nay, chúng ta thường in ra các thông báo khi xác thực đầu vào, nhưng nếu chúng ta đang viết một hàm được thực thi từ nơi khác, thì việc in ra một cái gì đó có thể không được chú ý khi hàm được gọi. Đưa ra lỗi có thể giúp việc gỡ lỗi dễ dàng hơn Trong ví dụ sau chúng ta có một hàm tính giai thừa (ví dụ giai thừa của số 5 là 1 * 2 * 3 * 4 * 5). Nếu đối số được truyền cho hàm là âm, thì hàm sẽ báo lỗi 4đầu ra mẫu 6 720 Traceback (lần gọi gần đây nhất). Tập tin "kiểm tra. py", dòng 11, inprint(factorial(-1)) Tệp "kiểm tra. py", dòng 3, trong giai thừa tăng ValueError("Đầu vào âm. " + str(n)) Giá trịLỗi. Đầu vào là tiêu cực. -1 Python xử lý các đầu vào không hợp lệ như thế nào?Yêu cầu người dùng nhập lại giá trị nếu người dùng nhập giá trị không hợp lệ. . Nhận đầu vào từ người dùng bằng raw_input() (Python 2) hoặc input() (Python 3) Kiểu tên biến là string nên ta phải dùng phương thức string để user nhập string hợp lệ Sử dụng phương thức chuỗi isalpha() để kiểm tra chuỗi người dùng nhập vào có hợp lệ hay không Lỗi được xử lý như thế nào trong lập trình Python?Không thể xử lý lỗi, trong khi các ngoại lệ Python có thể được xử lý trong thời gian chạy. Lỗi có thể là lỗi cú pháp (phân tích cú pháp), trong khi có thể có nhiều loại ngoại lệ có thể xảy ra trong quá trình thực thi và không phải là không thể hoạt động vô điều kiện. . Lỗi cú pháp Lỗi bộ nhớ Lỗi đệ quy ngoại lệ |