Hướng dẫn raise exception without try python - tăng ngoại lệ mà không cần thử python
Sử dụng hàm tạo ngoại lệ cụ thể nhất phù hợp về mặt ngữ nghĩa của bạn. Show
Hãy cụ thể trong tin nhắn của bạn, ví dụ:
Đừng nâng cao các trường hợp ngoại lệ chungTránh nâng cao 0 chung. Để bắt nó, bạn sẽ phải nắm bắt tất cả các trường hợp ngoại lệ cụ thể khác mà phân lớp nó.Bài 1: ẩn lỗi
Ví dụ:
Bài 2: Không bắt đượcVà 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 tiễn tốt nhất: Tuyên bố 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',) 1Thay vào đó, hãy sử dụng hàm tạo ngoại lệ cụ thể nhất phù hợp về mặt ngữ nghĩa của bạn.
cũng cho phép một số lượng đối số tùy ý được chuyển cho 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
Trong Python 2.5, một thuộc tính 4 thực tế đã được thêm vào 5 ủng hộ việc khuyến khích người dùng các ngoại lệ của lớp con và ngừng sử dụng 2, nhưng việc giới thiệu 4 và việc không khấu hao ban đầu của ARGS đã được rút lại.Thực tiễn 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',) 8Khi bên trong một mệnh đề ngoại trừ, ví dụ, bạn có thể muốn đăng nhập rằng một loại lỗi cụ thể đã xảy ra, và sau đó chuyển đổi lại. Cách tốt nhất để làm điều này trong khi bảo tồn dấu vết ngăn xếp là sử dụng tuyên bố nâng cao. Ví dụ:
Đừng sửa đổi lỗi của bạn ... nhưng nếu bạn khăng khăng.Bạn có thể bảo toàn ngăn xếp (và giá trị lỗi) với 9, nhưng đây là cách dễ bị lỗi hơn và có vấn đề tương thích giữa Python 2 và 3, thích sử dụng 1 để truy xuất lại.this is way more error
prone and has compatibility problems between Python 2 and 3, prefer to use a bare 1 to re-raise.Để giải thích - 9 trả về loại, giá trị và dấu vết.
Đây là cú pháp trong Python 2 - Lưu ý Điều này không tương thích với Python 3: 0Nếu bạn muốn, bạn có thể sửa đổi những gì xảy ra với mức tăng mới của bạn - ví dụ: Đặt mới 2 cho phiên bản: 1Và chúng tôi đã bảo tồn toàn bộ dấu vết trong khi sửa đổi các cuộc tranh luận. Lưu ý rằng đây không phải là một thông lệ tốt nhất và nó là cú pháp không hợp lệ trong Python 3 (khiến việc giữ khả năng tương thích khó hoạt động hơn nhiều).not a best practice and it is invalid syntax in Python 3 (making keeping compatibility much harder to work around). 2Trong Python 3: 3Một lần nữa: Tránh thao tác thủ công theo dõi. Nó kém hiệu quả 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 dấu vết sai (đặc biệt là nếu bạn đang sử dụng xử lý ngoại lệ cho luồng điều khiển - 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ể chuỗi ngoại lệ, lưu giữ các dấu vết: 4Nhận biết:
Phương pháp không dùng nữa:Những điều này có thể dễ dàng ẩn và thậm chí đi vào mã sản xuất. Bạn muốn nâng cao một ngoại lệ, và làm chúng sẽ tăng một ngoại lệ, nhưng không phải là ý định!but not the one intended! Hợp lệ trong Python 2, nhưng không phải trong Python 3 như sau: 5Chỉ có giá trị 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 chuỗi: 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 phải là loại 5. Nếu bạn không kiểm tra ngoại lệ đúng và không có người đánh giá biết về vấn đề này, nó có thể được đưa vào sản xuất.Ví dụ sử dụngTôi nêu ra các ngoại lệ để cảnh báo người tiêu dùng API của mình nếu họ sử dụng nó không chính xác: 7Tạo các loại lỗi của riêng bạn khi apropos
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ể là sai với ứng dụng của bạn, chỉ cần phân lớp điểm thích hợp trong hệ thống phân cấp ngoại lệ: 8và cách sử dụng: 9
Tôi có thể sử dụng ngoại trừ mà không cần thử trong Python không?Chặn để xử lý các ngoại lệ trong Python.Nó cho phép chúng tôi áp dụng một số hoạt động đặc biệt khi có điều gì đó không ổn.Nếu tình huống thỏa mãn các điều kiện trên, bạn không phải sử dụng thử ... ngoại trừ ... để xử lý các ngoại lệ.If the situation satisfies the above conditions, you don't have to use try ... except ... to handle the exceptions.
Có phải thực hành tốt để sử dụng thử ngoại trừ trong Python?Lý do sử dụng thử/ngoại trừ là khi bạn có một khối mã để thực thi đôi khi sẽ chạy chính xác và đôi khi không, tùy thuộc vào các điều kiện bạn không thể thấy trước tại thời điểm bạn viết mã.when you have a code block to execute that will sometimes run correctly and sometimes not, depending on conditions you can't foresee at the time you're writing the code.
Có phải một ngoại lệ dừng thực thi Python?Khi một ngoại lệ được nêu ra, không có câu lệnh nào trong khối mã hiện tại được thực thi.Trừ khi ngoại lệ được xử lý (được mô tả bên dưới), trình thông dịch sẽ trở lại trực tiếp vào vòng lặp in-eval tương tác hoặc chấm dứt hoàn toàn nếu Python được bắt đầu bằng đối số tệp. |