Tăng ngoại lệ trong python để làm gì?
Từ khóa nâng cao Python được sử dụng để tăng ngoại lệ hoặc lỗi. Từ khóa raise phát sinh lỗi và dừng luồng điều khiển của chương trình. Nó được sử dụng để hiển thị ngoại lệ hiện tại trong một trình xử lý ngoại lệ để nó có thể được xử lý thêm trong ngăn xếp cuộc gọi Show
Cú pháp của từ khóa tăng
Cách cơ bản để gây ra một lỗi là
Ví dụ Trong đoạn mã dưới đây, chúng tôi kiểm tra xem một số nguyên là chẵn hay lẻ. nếu số nguyên là số lẻ, một ngoại lệ được nêu ra. a là một biến mà chúng tôi đã gán một số 5, vì a là số lẻ, sau đó nếu vòng lặp kiểm tra xem đó có phải là số nguyên lẻ hay không, nếu đó là số nguyên lẻ thì sẽ xảy ra lỗi Đầu vào Python3 3 4 5 6 7 3 9 0 1 4 40 41 42 43 44 45 46đầu ra Trong khi nêu lỗi, chúng tôi cũng có thể nêu loại lỗi nào chúng tôi cần nêu và nếu cần, in ra văn bản cú pháp.
Ví dụ Trong đoạn mã dưới đây, chúng tôi đã thử thay đổi chuỗi 'apple' được gán cho s thành số nguyên và viết mệnh đề try-except để tăng ValueError. từ khóa nâng cao gây ra lỗi giá trị với thông báo “Chuỗi không thể thay đổi thành số nguyên” Đầu vào Python3 47 4 49 6 51 41 42 54 4 56 57 58 59 42 43 62______363 46đầu ra Đưa ra một ngoại lệ mà không chỉ định lớp ngoại lệKhi chúng tôi sử dụng từ khóa nâng cao, không bắt buộc phải đưa ra một lớp ngoại lệ cùng với nó. Khi chúng tôi không cung cấp bất kỳ tên lớp ngoại lệ nào với từ khóa nâng cao, nó sẽ kích hoạt lại ngoại lệ xảy ra lần cuối Ví dụ Trong đoạn mã trên, chúng tôi đã thử thay đổi chuỗi 'apple' thành số nguyên và viết mệnh đề try-ngoại trừ để tăng ValueError. Mã vẫn giống như trước ngoại trừ việc chúng tôi không cung cấp một lớp ngoại lệ, nó sẽ xác định lại ngoại lệ đã xảy ra lần cuối Tránh tăng một 0 chung chung. Để nắm bắt nó, bạn sẽ phải nắm bắt tất cả các ngoại lệ cụ thể khác phân loại nóvấn đề 1. Ẩn lỗi
Ví dụ
vấn đề 2. Sẽ không bắtVà các sản phẩm khai thác cụ thể hơn sẽ không bắt được ngoại lệ chung
Thực hành tốt nhất. def demo_bad_catch(): try: raise ValueError('Represents a hidden bug, do not catch this') raise Exception('This is the exception you expect to handle') except Exception as error: print('Caught this error: ' + repr(error)) >>> demo_bad_catch() Caught this error: ValueError('Represents a hidden bug, do not catch this',) 1 tuyên bốThay vào đó, hãy sử dụng hàm tạo Ngoại lệ cụ thể nhất phù hợp với vấn đề của bạn về mặt ngữ nghĩa
điều này cũng thuận tiện cho phép một số lượng đối số tùy ý được chuyển đến hàm tạo
Các đối số này được truy cập bởi thuộc tính 2 trên đối tượng 0. Ví dụ
bản in 0Trong Python 2. 5, một thuộc tính thực tế của 4 đã được thêm vào 5 để khuyến khích người dùng phân lớp Ngoại lệ và ngừng sử dụng 2, nhưng việc giới thiệu 4 và việc ngừng sử dụng các đối số ban đầu đã bị rút lạiThực hành tốt nhất. mệnh đề def demo_bad_catch(): try: raise ValueError('Represents a hidden bug, do not catch this') raise Exception('This is the exception you expect to handle') except Exception as error: print('Caught this error: ' + repr(error)) >>> demo_bad_catch() Caught this error: ValueError('Represents a hidden bug, do not catch this',) 8Ví dụ, khi bên trong một mệnh đề ngoại trừ, bạn có thể muốn ghi nhật ký rằng một loại lỗi cụ thể đã xảy ra, sau đó tăng lại. Cách tốt nhất để làm điều này trong khi vẫn giữ nguyên dấu vết ngăn xếp là sử dụng câu lệnh tăng trần. Ví dụ 6Đừng sửa đổi lỗi của bạn. nhưng nếu bạn khăng khăngBạn có thể duy trì stacktrace (và giá trị lỗi) với 9, nhưng cách này dễ bị lỗi hơn và có vấn đề về khả năng tương thích giữa Python 2 và 3, bạn nên sử dụng 1 trần để nâng cấp lạiĐể giải thích - 9 trả về loại, giá trị và truy nguyên 0Đây là cú pháp trong Python 2 - lưu ý rằng cú pháp này không tương thích với Python 3 0Nếu muốn, bạn có thể sửa đổi những gì xảy ra với mức tăng lương mới của mình - e. g. thiết lập 2 mới cho ví dụ 1Và chúng tôi đã bảo tồn toàn bộ truy nguyên trong khi sửa đổi các đối số. Lưu ý rằng đây không phải là cách thực hành tốt nhất và cú pháp không hợp lệ trong Python 3 (khiến việc duy trì khả năng tương thích trở nên khó khăn hơn nhiều) 2Trong Trăn 3 3Lần nữa. tránh thao tác theo dõi thủ công. Nó kém hiệu quả hơn và dễ bị lỗi hơn. Và nếu bạn đang sử dụng luồng và 3, bạn thậm chí có thể nhận được truy nguyên sai (đặc biệt nếu bạn đang sử dụng xử lý ngoại lệ cho luồng điều khiển - điều mà cá nhân tôi có xu hướng tránh. )Python 3, Chuỗi ngoại lệTrong Python 3, bạn có thể xâu chuỗi các Ngoại lệ, giúp duy trì truy nguyên 4hãy nhận biết
Phương pháp không dùng nữaChúng có thể dễ dàng ẩn và thậm chí vào mã sản xuất. Bạn muốn đưa ra một ngoại lệ và việc thực hiện chúng sẽ đưa ra một ngoại lệ, nhưng không phải là ngoại lệ dự định Hợp lệ trong Python 2, nhưng không có trong Python 3 như sau 5Chỉ hợp lệ trong các phiên bản Python cũ hơn nhiều (2. 4 trở xuống), bạn vẫn có thể thấy mọi người nâng dây 6Trong tất cả các phiên bản hiện đại, điều này thực sự sẽ tăng 4, bởi vì bạn không tăng loại 5. Nếu bạn không kiểm tra đúng ngoại lệ và không có người đánh giá nào biết về vấn đề này, thì nó có thể được đưa vào sản xuấtVí dụ sử dụngTôi đưa ra các Ngoại lệ để cảnh báo người tiêu dùng về API của tôi nếu họ sử dụng không đúng cách 7Tạo các loại lỗi của riêng bạn khi được đề xuất
Bạn có thể tạo các loại lỗi của riêng mình, nếu bạn muốn chỉ ra điều gì đó cụ thể không ổn với ứng dụng của mình, chỉ cần phân loại điểm thích hợp trong hệ thống phân cấp ngoại lệ Điều gì xảy ra khi Python tăng ngoại lệ?Đô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 đưa ra thường cảnh báo người dùng hoặc ứng dụng gọi điện .
Tôi có nên tăng ngoại lệ Python không?Bất cứ khi nào có thể, tốt hơn hết là nêu ra và xử lý các trường hợp ngoại lệ một cách rõ ràng . Sử dụng khác để mã thực thi nếu lần thử không đưa ra ngoại lệ.
Ngoại lệ hoạt động như thế nào trong Python?Ngoại lệ là một sự kiện, xảy ra trong quá trình thực thi chương trình làm gián đoạn luồng hướng dẫn bình thường của chương trình. Nói chung, khi tập lệnh Python gặp tình huống mà nó không thể đối phó, nó sẽ đưa ra một ngoại lệ . Một ngoại lệ là một đối tượng Python đại diện cho một lỗi. |