Trong Python, tất cả các ngoại lệ phải là thể hiện của một lớp bắt nguồn từ. Trong một câu lệnh có một mệnh đề đề cập đến một lớp cụ thể, mệnh đề đó cũng xử lý mọi lớp ngoại lệ bắt nguồn từ lớp đó [nhưng không phải là các lớp ngoại lệ mà nó được dẫn xuất từ đó]. Hai lớp ngoại lệ không liên quan thông qua phân lớp không bao giờ tương đương, ngay cả khi chúng có cùng tên
Các ngoại lệ tích hợp được liệt kê bên dưới có thể được tạo bởi trình thông dịch hoặc các hàm tích hợp. Trừ khi được đề cập, chúng có một "giá trị liên quan" cho biết nguyên nhân chi tiết của lỗi. Đây có thể là một chuỗi hoặc một bộ gồm nhiều mục thông tin [e. g. , một mã lỗi và một chuỗi giải thích mã]. Giá trị được liên kết thường được truyền dưới dạng đối số cho hàm tạo của lớp ngoại lệ
Mã người dùng có thể tăng ngoại lệ tích hợp. Điều này có thể được sử dụng để kiểm tra một trình xử lý ngoại lệ hoặc để báo cáo một tình trạng lỗi “giống như” tình huống mà trình thông dịch đưa ra cùng một ngoại lệ;
Các lớp ngoại lệ tích hợp có thể được phân lớp để xác định các ngoại lệ mới; . Thông tin thêm về cách xác định ngoại lệ có sẵn trong Hướng dẫn Python bên dưới
bối cảnh ngoại lệ
Khi đưa ra một ngoại lệ mới trong khi một ngoại lệ khác đang được xử lý, thuộc tính
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]0 của ngoại lệ mới sẽ tự động được đặt thành ngoại lệ được xử lý. Một ngoại lệ có thể được xử lý khi một hoặc mệnh đề hoặc một câu lệnh được sử dụng
Bối cảnh ngoại lệ tiềm ẩn này có thể được bổ sung với một nguyên nhân rõ ràng bằng cách sử dụng
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]4 với
raise new_exc from original_exc
Biểu thức sau đây phải là một ngoại lệ hoặc
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]7. Nó sẽ được đặt là
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8 đối với ngoại lệ được nêu ra. Đặt
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8 cũng ngầm đặt thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True0 thành
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True1, để việc sử dụng
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True2 thay thế hiệu quả ngoại lệ cũ bằng ngoại lệ mới cho mục đích hiển thị [e. g. chuyển đổi thành ], đồng thời để lại ngoại lệ cũ có sẵn trong
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]0 để xem xét nội tâm khi gỡ lỗi
Mã hiển thị truy nguyên mặc định hiển thị các ngoại lệ được xâu chuỗi này ngoài truy nguyên cho chính ngoại lệ đó. Một ngoại lệ được xâu chuỗi rõ ràng trong
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8 luôn được hiển thị khi có mặt. Một ngoại lệ được xâu chuỗi hoàn toàn trong
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]0 chỉ được hiển thị nếu
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8 là và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True0 là sai
Trong cả hai trường hợp, bản thân ngoại lệ luôn được hiển thị sau bất kỳ ngoại lệ chuỗi nào để dòng cuối cùng của truy nguyên luôn hiển thị ngoại lệ cuối cùng đã được nêu ra
Kế thừa từ các ngoại lệ tích hợp
Mã người dùng có thể tạo các lớp con kế thừa từ một loại ngoại lệ. Bạn chỉ nên phân lớp một loại ngoại lệ tại một thời điểm để tránh bất kỳ xung đột nào có thể xảy ra giữa cách các cơ sở xử lý thuộc tính
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]41, cũng như do khả năng không tương thích về bố cục bộ nhớ
Chi tiết triển khai CPython. Hầu hết các ngoại lệ tích hợp đều được triển khai trong C để đạt hiệu quả, xem. Đối tượng/ngoại lệ. c. Một số có bố cục bộ nhớ tùy chỉnh khiến không thể tạo lớp con kế thừa từ nhiều loại ngoại lệ. Bố cục bộ nhớ của một loại là chi tiết triển khai và có thể thay đổi giữa các phiên bản Python, dẫn đến xung đột mới trong tương lai. Do đó, nên tránh hoàn toàn việc phân loại nhiều loại ngoại lệ
lớp cơ sở
Các ngoại lệ sau được sử dụng chủ yếu làm lớp cơ sở cho các ngoại lệ khác
ngoại lệ BaseExceptionLớp cơ sở cho tất cả các ngoại lệ tích hợp. Nó không có nghĩa là được kế thừa trực tiếp bởi các lớp do người dùng định nghĩa [đối với điều đó, hãy sử dụng ]. Nếu được gọi trên một thể hiện của lớp này, biểu diễn của [các] đối số cho thể hiện được trả về hoặc chuỗi trống khi không có đối số
tranh luậnBộ đối số được cung cấp cho hàm tạo ngoại lệ. Một số ngoại lệ tích hợp [như ] yêu cầu một số đối số nhất định và gán ý nghĩa đặc biệt cho các phần tử của bộ dữ liệu này, trong khi các ngoại lệ khác thường chỉ được gọi với một chuỗi đưa ra thông báo lỗi
with_traceback[tb]Phương thức này đặt tb làm truy nguyên mới cho ngoại lệ và trả về đối tượng ngoại lệ. Nó được sử dụng phổ biến hơn trước khi các tính năng chuỗi ngoại lệ của PEP 3134 khả dụng. Ví dụ sau đây cho thấy cách chúng ta có thể chuyển đổi phiên bản của
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]45 thành phiên bản của
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]46 trong khi vẫn giữ nguyên truy nguyên. Sau khi được nâng lên, khung hiện tại được đẩy lên truy nguyên của
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]46, như đã xảy ra với truy nguyên của
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]45 ban đầu nếu chúng tôi cho phép nó truyền tới người gọi
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]add_note[ghi chú]
Thêm chuỗi
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]49 vào ghi chú của ngoại lệ xuất hiện trong truy nguyên tiêu chuẩn sau chuỗi ngoại lệ. A được nâng lên nếu
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]49 không phải là một chuỗi
Mới trong phiên bản 3. 11
__ghi chú__Một danh sách các ghi chú của ngoại lệ này, đã được thêm vào với. Thuộc tính này được tạo khi được gọi
Mới trong phiên bản 3. 11
ngoại lệ ngoại lệTất cả các ngoại lệ tích hợp, không thoát khỏi hệ thống đều bắt nguồn từ lớp này. Tất cả các ngoại lệ do người dùng định nghĩa cũng phải được bắt nguồn từ lớp này
ngoại lệ Lỗi số họcLớp cơ sở dành cho những ngoại lệ tích hợp được đưa ra cho các lỗi số học khác nhau. , ,
ngoại lệ Lỗi bộ đệmTăng lên khi một hoạt động liên quan không thể được thực hiện
ngoại lệ Lỗi tra cứuLớp cơ sở cho các ngoại lệ được nêu ra khi khóa hoặc chỉ mục được sử dụng trên ánh xạ hoặc chuỗi không hợp lệ. ,. Điều này có thể được nâng lên trực tiếp bởi
ngoại lệ cụ thể
Các ngoại lệ sau đây là những ngoại lệ thường được nêu ra
ngoại lệ Lỗi khẳng địnhTăng lên khi một tuyên bố thất bại
ngoại lệ Lỗi thuộc tínhXảy ra khi tham chiếu thuộc tính [xem ] hoặc gán không thành công. [Khi một đối tượng hoàn toàn không hỗ trợ tham chiếu thuộc tính hoặc gán thuộc tính,. ]
Các thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True13 có thể được đặt bằng cách sử dụng các đối số chỉ từ khóa cho hàm tạo. Khi được đặt, chúng đại diện cho tên của thuộc tính đã cố gắng truy cập và đối tượng được truy cập cho thuộc tính đã nói, tương ứng
Đã thay đổi trong phiên bản 3. 10. Đã thêm thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True13. ngoại lệ Lỗi EOF
Tăng lên khi hàm chạm vào điều kiện cuối tệp [EOF] mà không đọc bất kỳ dữ liệu nào. [N. B.
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True17 và các phương thức trả về một chuỗi rỗng khi chúng nhấn EOF. ]ngoại lệ Lỗi dấu phẩy động
hiện không được sử dụng
ngoại lệ Thoát Trình tạoTăng lên khi một hoặc được đóng lại; . Nó trực tiếp kế thừa từ thay vì về mặt kỹ thuật không phải là lỗi
ngoại lệ Lỗi nhậpXảy ra khi câu lệnh gặp sự cố khi cố tải một mô-đun. Cũng được nêu ra khi “từ danh sách” trong
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True64 có tên không thể tìm thấy
Các thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True66 có thể được đặt bằng cách sử dụng các đối số chỉ từ khóa cho hàm tạo. Khi được đặt, chúng đại diện cho tên của mô-đun đã cố gắng nhập và đường dẫn đến bất kỳ tệp nào đã kích hoạt ngoại lệ, tương ứng
Đã thay đổi trong phiên bản 3. 3. Đã thêm thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True66. ngoại lệ Lỗi ModuleNotFound
Một lớp con được nâng lên khi không thể định vị một mô-đun. Nó cũng được nêu ra khi
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]7 được tìm thấy trong
Mới trong phiên bản 3. 6
ngoại lệ Lỗi chỉ mụcTăng lên khi một chuỗi con nằm ngoài phạm vi. [Các chỉ số của lát được cắt ngắn một cách lặng lẽ để nằm trong phạm vi cho phép; nếu một chỉ số không phải là số nguyên, thì sẽ được nâng lên. ]
ngoại lệ Lỗi phímXảy ra khi không tìm thấy khóa ánh xạ [từ điển] trong tập hợp các khóa hiện có
ngoại lệ Ngắt bàn phímTăng lên khi người dùng nhấn phím ngắt [thường là Control-C hoặc Delete]. Trong quá trình thực hiện, việc kiểm tra các ngắt được thực hiện thường xuyên. Ngoại lệ kế thừa từ để không vô tình bị bắt bởi mã bắt và do đó ngăn trình thông dịch thoát ra
Ghi chú
Nắm bắt một yêu cầu xem xét đặc biệt. Bởi vì nó có thể được nâng lên ở những điểm không thể đoán trước, trong một số trường hợp, nó có thể khiến chương trình đang chạy ở trạng thái không nhất quán. Nói chung, tốt nhất là cho phép kết thúc chương trình càng nhanh càng tốt hoặc tránh nâng cao hoàn toàn. [Nhìn thấy. ]
ngoại lệ Lỗi bộ nhớXảy ra khi một thao tác hết bộ nhớ nhưng tình huống vẫn có thể được giải quyết [bằng cách xóa một số đối tượng]. Giá trị được liên kết là một chuỗi cho biết loại thao tác [nội bộ] nào đã hết bộ nhớ. Lưu ý rằng do kiến trúc quản lý bộ nhớ cơ bản [chức năng
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True18 của C], trình thông dịch không phải lúc nào cũng có thể khôi phục hoàn toàn sau tình huống này; ngoại lệ Lỗi Tên
Xảy ra khi không tìm thấy tên cục bộ hoặc toàn cầu. Điều này chỉ áp dụng cho tên không đủ tiêu chuẩn. Giá trị được liên kết là một thông báo lỗi bao gồm tên không thể tìm thấy
Thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12 có thể được đặt bằng cách sử dụng đối số chỉ từ khóa cho hàm tạo. Khi được đặt, nó đại diện cho tên của biến đã được cố gắng truy cập
Đã thay đổi trong phiên bản 3. 10. Đã thêm thuộc tính
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True12. ngoại lệ Lỗi NotImplemented
Ngoại lệ này có nguồn gốc từ. Trong các lớp cơ sở do người dùng định nghĩa, các phương thức trừu tượng sẽ đưa ra ngoại lệ này khi chúng yêu cầu các lớp dẫn xuất ghi đè phương thức hoặc trong khi lớp đang được phát triển để chỉ ra rằng việc triển khai thực vẫn cần được thêm vào
Ghi chú
Nó không nên được sử dụng để chỉ ra rằng một toán tử hoặc phương thức hoàn toàn không được hỗ trợ – trong trường hợp đó, hãy để toán tử / phương thức không được xác định hoặc, nếu là một lớp con, hãy đặt nó thành
Ghi chú
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True43 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True44 không thể thay thế cho nhau, mặc dù chúng có tên và mục đích giống nhau. Xem để biết chi tiết về thời điểm sử dụng nóngoại lệ Lỗi hệ điều hành[[arg]]exception OSError[errno, strerror[, filename[, winerror[, filename2]]]]
Ngoại lệ này được đưa ra khi một chức năng hệ thống trả về một lỗi liên quan đến hệ thống, bao gồm các lỗi I/O chẳng hạn như “không tìm thấy tệp” hoặc “đĩa đầy” [không dành cho các loại đối số không hợp lệ hoặc các lỗi ngẫu nhiên khác]
Dạng thứ hai của hàm tạo đặt các thuộc tính tương ứng, được mô tả bên dưới. Các thuộc tính mặc định nếu không được chỉ định. Để tương thích ngược, nếu ba đối số được truyền, thì thuộc tính chỉ chứa 2 bộ trong số hai đối số hàm tạo đầu tiên
Hàm tạo thường thực sự trả về một lớp con của , như được mô tả bên dưới. Lớp con cụ thể phụ thuộc vào giá trị cuối cùng. Hành vi này chỉ xảy ra khi xây dựng trực tiếp hoặc thông qua bí danh và không được kế thừa khi phân lớp
sai lầmMã lỗi số từ biến C
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49winerror
Trong Windows, điều này cung cấp cho bạn mã lỗi Windows gốc. Sau đó, thuộc tính là bản dịch gần đúng, theo thuật ngữ POSIX, của mã lỗi gốc đó
Trong Windows, nếu đối số hàm tạo winerror là một số nguyên, thì thuộc tính được xác định từ mã lỗi Windows và đối số errno bị bỏ qua. Trên các nền tảng khác, đối số winerror bị bỏ qua và thuộc tính không tồn tại
kinh hoàngThông báo lỗi tương ứng, do hệ điều hành cung cấp. Nó được định dạng bởi các hàm C
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True15 trong POSIX và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True16 trong Windowstên tệptên tệp2
Đối với các trường hợp ngoại lệ liên quan đến đường dẫn hệ thống tệp [chẳng hạn như hoặc ], tên tệp có được truyền cho hàm không. Đối với các hàm liên quan đến hai đường dẫn hệ thống tệp [chẳng hạn như ], tương ứng với tên tệp thứ hai được truyền cho hàm
Đã thay đổi trong phiên bản 3. 3. , , , và
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]07 đã được hợp nhất thành , và hàm tạo có thể trả về một lớp con.
Đã thay đổi trong phiên bản 3. 4. Thuộc tính bây giờ là tên tệp gốc được truyền cho hàm, thay vì tên được mã hóa hoặc giải mã từ. Ngoài ra, đối số và thuộc tính hàm tạo filename2 đã được thêm vào.
ngoại lệ Lỗi trànXảy ra khi kết quả của một phép toán số học quá lớn để được biểu diễn. Điều này không thể xảy ra đối với số nguyên [thà tăng còn hơn bỏ]. Tuy nhiên, vì lý do lịch sử, OverflowError đôi khi được đưa ra đối với các số nguyên nằm ngoài phạm vi bắt buộc. Do thiếu tiêu chuẩn hóa việc xử lý ngoại lệ dấu chấm động trong C, nên hầu hết các hoạt động của dấu chấm động không được kiểm tra
ngoại lệ Lỗi đệ quyNgoại lệ này có nguồn gốc từ. Nó được nâng lên khi trình thông dịch phát hiện vượt quá độ sâu đệ quy tối đa [xem ]
Mới trong phiên bản 3. 5. Trước đây đồng bằng được nâng lên.
ngoại lệ Lỗi tham chiếuNgoại lệ này được đưa ra khi một proxy tham chiếu yếu, được tạo bởi hàm, được sử dụng để truy cập một thuộc tính của tham chiếu sau khi nó đã được thu gom rác. Để biết thêm thông tin về tham chiếu yếu, hãy xem mô-đun
ngoại lệ Lỗi thời gian chạyXảy ra khi phát hiện lỗi không thuộc bất kỳ danh mục nào khác. Giá trị được liên kết là một chuỗi cho biết chính xác điều gì đã xảy ra
ngoại lệ StopIterationĐược tăng lên bởi chức năng tích hợp và phương thức 's để báo hiệu rằng không có mục nào khác được tạo bởi trình vòng lặp
Đối tượng ngoại lệ có một thuộc tính duy nhất là
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]18, được đưa ra làm đối số khi xây dựng ngoại lệ và mặc định là
Khi một hoặc hàm trả về, một thể hiện mới được nâng lên và giá trị do hàm trả về được sử dụng làm tham số
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]18 cho hàm tạo của ngoại lệ
Nếu một mã trình tạo tăng trực tiếp hoặc gián tiếp, nó sẽ được chuyển đổi thành [giữ lại làm nguyên nhân của ngoại lệ mới]
Đã thay đổi trong phiên bản 3. 3. Đã thêm thuộc tính
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]18 và khả năng cho các hàm tạo sử dụng nó để trả về một giá trị.
Đã thay đổi trong phiên bản 3. 5. Đã giới thiệu chuyển đổi RuntimeError qua
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]26, xem PEP 479.
Đã thay đổi trong phiên bản 3. 7. Bật PEP 479 cho tất cả mã theo mặc định. một lỗi phát sinh trong một trình tạo được chuyển thành một.
ngoại lệ StopAsyncIterationPhải được nâng lên bằng phương pháp
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]29 của một đối tượng để dừng việc lặp lại
Mới trong phiên bản 3. 5
ngoại lệ Lỗi cú pháp[thông báo , details]Xảy ra khi trình phân tích cú pháp gặp lỗi cú pháp. Điều này có thể xảy ra trong một câu lệnh, trong một cuộc gọi đến các hàm tích hợp sẵn , , hoặc hoặc khi đọc tập lệnh ban đầu hoặc đầu vào tiêu chuẩn [cũng tương tác]
Trường hợp ngoại lệ chỉ trả về thông báo lỗi. Chi tiết là một bộ có các thành viên cũng có sẵn dưới dạng các thuộc tính riêng biệt
tên tập tinTên của tệp xảy ra lỗi cú pháp trong
vải lanhSố dòng nào trong tệp xảy ra lỗi trong. Đây là 1 chỉ mục. dòng đầu tiên trong tệp có một
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]35 của 1bù lại
Cột trong dòng xảy ra lỗi. Đây là 1 chỉ mục. ký tự đầu tiên trong dòng có một
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]36 của 1
Văn bản mã nguồn liên quan đến lỗi
end_linenoSố dòng nào trong tệp xảy ra lỗi kết thúc bằng. Đây là 1 chỉ mục. dòng đầu tiên trong tệp có một
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]35 của 1end_offset
Cột ở dòng cuối nơi xảy ra lỗi kết thúc. Đây là 1 chỉ mục. ký tự đầu tiên trong dòng có một
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]36 của 1
Đối với các lỗi trong các trường chuỗi f, thông báo có tiền tố là “chuỗi f. ” và phần bù là phần bù trong văn bản được tạo từ biểu thức thay thế. Ví dụ: biên dịch trường f'Bad {a b}' dẫn đến thuộc tính args này. [‘chuỗi f. …’, [‘’, 1, 2, ‘[a b]n’, 1, 5]]
Đã thay đổi trong phiên bản 3. 10. Đã thêm thuộc tính và.
ngoại lệ Lỗi thụt lềLớp cơ sở cho các lỗi cú pháp liên quan đến thụt lề không chính xác. Đây là một phân lớp của
ngoại lệ Lỗi tabTăng lên khi thụt lề có sử dụng không nhất quán các tab và dấu cách. Đây là một phân lớp của
ngoại lệ Lỗi hệ thốngXảy ra khi trình thông dịch tìm thấy một lỗi nội bộ, nhưng tình huống có vẻ không nghiêm trọng đến mức khiến nó từ bỏ mọi hy vọng. Giá trị được liên kết là một chuỗi cho biết điều gì đã xảy ra [theo thuật ngữ cấp thấp]
Bạn nên báo cáo điều này với tác giả hoặc người duy trì trình thông dịch Python của bạn. Đảm bảo báo cáo phiên bản của trình thông dịch Python [
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]43; nó cũng được in khi bắt đầu phiên Python tương tác], thông báo lỗi chính xác [giá trị liên quan đến ngoại lệ] và nếu có thể, nguồn của chương trình đã gây ra lỗingoại lệ Thoát hệ thống
Ngoại lệ này được đưa ra bởi chức năng. Nó kế thừa từ thay vì để nó không vô tình bị mã bắt. Điều này cho phép ngoại lệ lan truyền đúng cách và khiến trình thông dịch thoát ra. Khi nó không được xử lý, trình thông dịch Python sẽ thoát; . Hàm tạo chấp nhận cùng một đối số tùy chọn được truyền cho. Nếu giá trị là một số nguyên, nó chỉ định trạng thái thoát hệ thống [được chuyển đến hàm
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]49 của C];
Lệnh gọi đến được dịch thành ngoại lệ để có thể thực thi trình xử lý dọn dẹp [mệnh đề của câu lệnh] và để trình gỡ lỗi có thể thực thi tập lệnh mà không gặp rủi ro mất quyền kiểm soát. Hàm này có thể được sử dụng nếu thực sự cần thiết phải thoát ngay lập tức [ví dụ: trong tiến trình con sau khi gọi đến ]
mã sốTrạng thái thoát hoặc thông báo lỗi được chuyển đến hàm tạo. [Mặc định là
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]7. ]ngoại lệ TypeError
Xảy ra khi một thao tác hoặc chức năng được áp dụng cho một đối tượng thuộc loại không phù hợp. Giá trị được liên kết là một chuỗi cung cấp thông tin chi tiết về loại không khớp
Ngoại lệ này có thể được đưa ra bởi mã người dùng để chỉ ra rằng một thao tác đã thử trên một đối tượng không được hỗ trợ và không có nghĩa là. Nếu một đối tượng nhằm hỗ trợ một hoạt động nhất định nhưng chưa cung cấp một triển khai, thì đó có phải là ngoại lệ thích hợp để nâng cao
Truyền đối số sai loại [e. g. truyền a khi an được mong đợi] sẽ dẫn đến a , nhưng truyền đối số có giá trị sai [e. g. một số bên ngoài ranh giới dự kiến] sẽ dẫn đến một
ngoại lệ UnboundLocalErrorXảy ra khi một tham chiếu được tạo cho một biến cục bộ trong một hàm hoặc phương thức, nhưng không có giá trị nào được liên kết với biến đó. Đây là một phân lớp của
ngoại lệ Lỗi UnicodeXảy ra khi xảy ra lỗi mã hóa hoặc giải mã liên quan đến Unicode. Nó là một phân lớp của
có các thuộc tính mô tả lỗi mã hóa hoặc giải mã. Ví dụ:
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]65 cung cấp đầu vào không hợp lệ cụ thể khiến codec bị lỗimã hóa
Tên của mã hóa gây ra lỗi
lý doMột chuỗi mô tả lỗi codec cụ thể
vậtĐối tượng mà codec đang cố mã hóa hoặc giải mã
bắt đầuChỉ mục đầu tiên của dữ liệu không hợp lệ trong
chấm dứtChỉ mục sau dữ liệu không hợp lệ cuối cùng trong
ngoại lệ Lỗi UnicodeEncodeXảy ra khi xảy ra lỗi liên quan đến Unicode trong quá trình mã hóa. Nó là một phân lớp của
ngoại lệ Lỗi UnicodeDecodeXảy ra khi xảy ra lỗi liên quan đến Unicode trong quá trình giải mã. Nó là một phân lớp của
ngoại lệ Lỗi UnicodeTranslateXảy ra khi xảy ra lỗi liên quan đến Unicode trong quá trình dịch. Nó là một phân lớp của
ngoại lệ Lỗi giá trịXảy ra khi một hoạt động hoặc chức năng nhận được một đối số có loại phù hợp nhưng giá trị không phù hợp và tình huống không được mô tả bằng một ngoại lệ chính xác hơn, chẳng hạn như
ngoại lệ Lỗi ZeroDivisionXảy ra khi đối số thứ hai của phép chia hoặc phép toán modulo bằng 0. Giá trị được liên kết là một chuỗi cho biết loại toán hạng và phép toán
Các ngoại lệ sau đây được giữ lại để tương thích với các phiên bản trước; . 3, chúng là bí danh của
ngoại lệ Lỗi môi trườngngoại lệ Lỗi IOngoại lệ WindowsErrorChỉ khả dụng trên Windows
ngoại lệ hệ điều hành
Các ngoại lệ sau đây là các phân lớp của , chúng tăng lên tùy thuộc vào mã lỗi hệ thống
ngoại lệ BlockingIOErrorXảy ra khi một thao tác sẽ chặn trên một đối tượng [e. g. ổ cắm] được đặt cho hoạt động không chặn. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49 , , và
Ngoài thuộc tính của , có thể có thêm một thuộc tính
ký tự_viếtMột số nguyên chứa số ký tự được ghi vào luồng trước khi luồng bị chặn. Thuộc tính này khả dụng khi sử dụng các lớp I/O đệm từ mô-đun
ngoại lệ Lỗi ChildProcessXảy ra khi thao tác trên tiến trình con không thành công. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi kết nối
Một lớp cơ sở cho các vấn đề liên quan đến kết nối
Các lớp con là , , và
ngoại lệ Lỗi BrokenPipeMột lớp con của , được nâng lên khi cố gắng ghi trên một đường ống trong khi đầu kia đã bị đóng hoặc cố gắng ghi trên một ổ cắm đã bị tắt để ghi. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49 vàngoại lệ Lỗi kết nối bị hủy bỏ
Một lớp con của , được nâng lên khi nỗ lực kết nối bị hủy bỏ bởi ngang hàng. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi kết nối bị từ chối
Một lớp con của , được nâng lên khi nỗ lực kết nối bị từ chối bởi đồng nghiệp. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi thiết lập lại kết nối
Một lớp con của , được nâng lên khi kết nối được thiết lập lại bởi thiết bị ngang hàng. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi FileExists
Xảy ra khi cố gắng tạo một tệp hoặc thư mục đã tồn tại. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi FileNotFound
Xảy ra khi một tệp hoặc thư mục được yêu cầu nhưng không tồn tại. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi gián đoạn
Xảy ra khi cuộc gọi hệ thống bị gián đoạn bởi tín hiệu đến. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49
Đã thay đổi trong phiên bản 3. 5. Python hiện thử lại các lệnh gọi hệ thống khi một tòa nhà chọc trời bị tín hiệu làm gián đoạn, trừ khi trình xử lý tín hiệu đưa ra một ngoại lệ [xem PEP 475 để biết lý do], thay vì đưa ra.
ngoại lệ IsADirectoryErrorXảy ra khi một thao tác tệp [chẳng hạn như ] được yêu cầu trên một thư mục. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi NotADirectory
Xảy ra khi một hoạt động thư mục [chẳng hạn như ] được yêu cầu trên thứ gì đó không phải là thư mục. Trên hầu hết các nền tảng POSIX, nó cũng có thể tăng lên nếu một thao tác cố mở hoặc duyệt một tệp không phải thư mục như thể đó là một thư mục. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi quyền
Xảy ra khi cố chạy một thao tác mà không có quyền truy cập đầy đủ - ví dụ: quyền hệ thống tệp. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49 , , và
Đã thay đổi trong phiên bản 3. 11. 1. WASI hiện được ánh xạ tới.
ngoại lệ Lỗi ProcessLookupTăng lên khi một quy trình nhất định không tồn tại. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49ngoại lệ Lỗi hết giờ
Tăng lên khi chức năng hệ thống hết thời gian ở cấp hệ thống. Tương ứng với
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True49
Mới trong phiên bản 3. 3. Tất cả các phân lớp trên đã được thêm vào.
Xem thêm
PEP 3151 - Làm lại hệ thống phân cấp ngoại lệ của OS và IO
cảnh báo
Các trường hợp ngoại lệ sau đây được sử dụng làm danh mục cảnh báo;
ngoại lệ Cảnh báoLớp cơ sở cho danh mục cảnh báo
ngoại lệ Cảnh báo người dùngLớp cơ sở cho các cảnh báo được tạo bởi mã người dùng
ngoại lệ Cảnh báo không dùng nữaLớp cơ sở để cảnh báo về các tính năng không dùng nữa khi những cảnh báo đó dành cho các nhà phát triển Python khác
Bị bộ lọc cảnh báo mặc định bỏ qua, ngoại trừ trong mô-đun
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True25 [PEP 565]. Kích hoạt hiển thị cảnh báo này
Chính sách khấu hao được mô tả trong PEP 387
ngoại lệ PendingDeprecationWarningLớp cơ sở để cảnh báo về các tính năng đã lỗi thời và dự kiến sẽ không được dùng nữa trong tương lai, nhưng hiện tại không được dùng nữa
Lớp này hiếm khi được sử dụng vì việc đưa ra cảnh báo về khả năng ngừng hoạt động sắp tới là điều bất thường và được ưu tiên cho các hoạt động ngừng hoạt động
Bị bỏ qua bởi các bộ lọc cảnh báo mặc định. Kích hoạt hiển thị cảnh báo này
Chính sách khấu hao được mô tả trong PEP 387
ngoại lệ Cảnh báo cú phápLớp cơ sở để cảnh báo về cú pháp đáng ngờ
ngoại lệ Cảnh báo thời gian chạyLớp cơ sở để cảnh báo về hành vi thời gian chạy đáng ngờ
ngoại lệ Cảnh báo tương laiLớp cơ sở để cảnh báo về các tính năng không dùng nữa khi những cảnh báo đó dành cho người dùng cuối của các ứng dụng được viết bằng Python
ngoại lệ Cảnh báo nhậpLớp cơ sở để cảnh báo về các lỗi có thể xảy ra trong quá trình nhập mô-đun
Bị bỏ qua bởi các bộ lọc cảnh báo mặc định. Kích hoạt hiển thị cảnh báo này
ngoại lệ Cảnh báo UnicodeLớp cơ sở cho các cảnh báo liên quan đến Unicode
ngoại lệ Cảnh báo mã hóaLớp cơ sở cho các cảnh báo liên quan đến mã hóa
Xem để biết chi tiết
Mới trong phiên bản 3. 10
ngoại lệ Cảnh báo byteLớp cơ sở cho các cảnh báo liên quan đến và
ngoại lệ Cảnh báo tài nguyênLớp cơ sở cho các cảnh báo liên quan đến việc sử dụng tài nguyên
Bị bỏ qua bởi các bộ lọc cảnh báo mặc định. Kích hoạt hiển thị cảnh báo này
Mới trong phiên bản 3. 2
nhóm ngoại lệ
Những điều sau đây được sử dụng khi cần đưa ra nhiều ngoại lệ không liên quan. Chúng là một phần của hệ thống phân cấp ngoại lệ để chúng có thể được xử lý giống như tất cả các ngoại lệ khác. Ngoài ra, chúng được nhận dạng bởi , phù hợp với các nhóm con của chúng dựa trên các loại ngoại lệ có trong đó
ngoại lệ Nhóm ngoại lệ[tin nhắn , excs]exception BaseExceptionGroup[msg, excs]Cả hai loại ngoại lệ này đều bao bọc các ngoại lệ trong chuỗi
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True31. Tham số
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True32 phải là một chuỗi. Sự khác biệt giữa hai lớp là extends và nó có thể bọc bất kỳ ngoại lệ nào, trong khi extends và nó chỉ có thể bọc các lớp con của. Thiết kế này sao cho
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True38 bắt được nhưng không
Hàm tạo trả về một thay vì a nếu tất cả các ngoại lệ chứa trong đó đều là thể hiện, vì vậy nó có thể được sử dụng để thực hiện lựa chọn tự động. Mặt khác, hàm tạo đưa ra một ngoại lệ nếu có bất kỳ ngoại lệ nào không phải là một lớp con
thông điệpĐối số
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True32 cho hàm tạo. Đây là thuộc tính chỉ đọcngoại lệ
Một bộ các ngoại lệ trong chuỗi
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True31 được cung cấp cho hàm tạo. Đây là thuộc tính chỉ đọcnhóm con[điều kiện]
Trả về một nhóm ngoại lệ chỉ chứa các ngoại lệ từ nhóm hiện tại phù hợp với điều kiện hoặc
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]7 nếu kết quả trống
Điều kiện có thể là một hàm chấp nhận một ngoại lệ và trả về giá trị true cho những ngoại lệ phải nằm trong nhóm con hoặc nó có thể là một loại ngoại lệ hoặc một bộ gồm các loại ngoại lệ, được sử dụng để kiểm tra sự phù hợp bằng cách sử dụng cùng một kiểm tra đó.
Cấu trúc lồng nhau của ngoại lệ hiện tại được giữ nguyên trong kết quả, cũng như các giá trị của các trường ,
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True53,
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8,
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]0 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True56 của nó. Các nhóm lồng nhau trống được bỏ qua khỏi kết quả
Điều kiện được kiểm tra cho tất cả các ngoại lệ trong nhóm ngoại lệ lồng nhau, bao gồm cấp cao nhất và bất kỳ nhóm ngoại lệ lồng nhau nào. Nếu điều kiện đúng với một nhóm ngoại lệ như vậy, nó sẽ được đưa vào kết quả đầy đủ
tách[điều kiện]Like , nhưng trả về cặp
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True58 trong đó
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True59 là
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True60 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True61 là phần không khớp còn lạixuất phát[excs]
Trả về một nhóm ngoại lệ có cùng , nhưng bao bọc các ngoại lệ trong
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True31
Phương pháp này được sử dụng bởi và. Một lớp con cần ghi đè lên nó để tạo và trả về các thể hiện của lớp con thay vì
và sao chép các trường
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True53,
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]8,
try: ... except SomeException: tb = sys.exc_info[][2] raise OtherException[...].with_traceback[tb]0 và
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True56 từ nhóm ngoại lệ ban đầu sang nhóm được trả về bởi , vì vậy những trường này không cần được cập nhật bởi
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True
Lưu ý rằng định nghĩa
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True78, vì vậy các lớp con cần chữ ký hàm tạo khác cần ghi đè lên chữ ký đó thay vì
>>> class MyGroup[ExceptionGroup]: .. def derive[self, exc]: .. return MyGroup[self.message, exc] ... >>> e = MyGroup["eg", [ValueError[1], TypeError[2]]] >>> e.add_note["a note"] >>> e.__context__ = Exception["context"] >>> e.__cause__ = Exception["cause"] >>> try: .. raise e .. except Exception as e: .. exc = e ... >>> match, rest = exc.split[ValueError] >>> exc, exc.__context__, exc.__cause__, exc.__notes__ [MyGroup['eg', [ValueError[1], TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> match, match.__context__, match.__cause__, match.__notes__ [MyGroup['eg', [ValueError[1]]], Exception['context'], Exception['cause'], ['a note']] >>> rest, rest.__context__, rest.__cause__, rest.__notes__ [MyGroup['eg', [TypeError[2]]], Exception['context'], Exception['cause'], ['a note']] >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True79. Ví dụ: phần sau định nghĩa một lớp con của nhóm ngoại lệ chấp nhận một exit_code và xây dựng thông báo của nhóm từ nó