Python nói tập tin không tồn tại khi nó tồn tại

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__
True
0 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__
True
1, để 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__
True
2 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__
True
0 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ệ BaseException

Lớ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ận

Bộ đố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ọc

Lớ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ộ đệm

Tă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ứu

Lớ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 định

Tăng lên khi một tuyên bố thất bại

ngoại lệ Lỗi thuộc tính

Xả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__
True
12 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__
True
13 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__
True
12 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__
True
13.

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__
True
17 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ạo

Tă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ập

Xả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__
True
64 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__
True
12 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__
True
66 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__
True
12 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__
True
66.

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ục

Tă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ím

Xả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ím

Tă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__
True
18 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__
True
12 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__
True
12.

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__
True
43 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__
True
44 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ầm

Mã 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__
True
49

winerror

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àng

Thô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__
True
15 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__
True
16 trong Windows

tê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àn

Xả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 đệ quy

Ngoạ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ếu

Ngoạ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ạy

Xả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ệ StopAsyncIteration

Phả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 tin

Tên của tệp xảy ra lỗi cú pháp trong

vải lanh

Số 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 1

bù 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

chữ

Văn bản mã nguồn liên quan đến lỗi

end_lineno

Số 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 1

end_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 tab

Tă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ống

Xả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ỗi

ngoạ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ệ UnboundLocalError

Xả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 Unicode

Xả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ỗi

mã hóa

Tên của mã hóa gây ra lỗi

lý do

Mộ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 đầu

Chỉ mục đầu tiên của dữ liệu không hợp lệ trong

chấm dứt

Chỉ mục sau dữ liệu không hợp lệ cuối cùng trong

ngoại lệ Lỗi UnicodeEncode

Xả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 UnicodeDecode

Xả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 UnicodeTranslate

Xả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 ZeroDivision

Xả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ệ WindowsError

Chỉ 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ệ BlockingIOError

Xả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__
True
49 , , và

Ngoài thuộc tính của , có thể có thêm một thuộc tính

ký tự_viết

Mộ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 ChildProcess

Xả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__
True
49

ngoạ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 BrokenPipe

Mộ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__
True
49 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__
True
49

ngoạ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__
True
49

ngoạ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__
True
49

ngoạ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__
True
49

ngoạ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__
True
49

ngoạ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__
True
49

Đã 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ệ IsADirectoryError

Xả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__
True
49

ngoạ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__
True
49

ngoạ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__
True
49 , , và

Đã thay đổi trong phiên bản 3. 11. 1. WASI hiện được ánh xạ tới.

ngoại lệ Lỗi ProcessLookup

Tă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__
True
49

ngoạ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__
True
49

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áo

Lớp cơ sở cho danh mục cảnh báo

ngoại lệ Cảnh báo người dùng

Lớ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ữa

Lớ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__
True
25 [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ệ PendingDeprecationWarning

Lớ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áp

Lớp cơ sở để cảnh báo về cú pháp đáng ngờ

ngoại lệ Cảnh báo thời gian chạy

Lớ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 lai

Lớ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ập

Lớ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 Unicode

Lớp cơ sở cho các cảnh báo liên quan đến Unicode

ngoại lệ Cảnh báo mã hóa

Lớ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 byte

Lớ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ên

Lớ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__
True
31. 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__
True
32 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__
True
38 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__
True
32 cho hàm tạo. Đây là thuộc tính chỉ đọc

ngoạ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__
True
31 được cung cấp cho hàm tạo. Đây là thuộc tính chỉ đọc

nhó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__
True
53,
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__
True
56 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__
True
58 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__
True
59 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__
True
60 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__
True
61 là phần không khớp còn lại

xuấ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__
True
31

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__
True
53,
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__
True
56 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__
True
78, 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__
True
79. 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ó

Tại sao Python nói rằng tệp của tôi không tồn tại?

Lỗi FileNotFound của Python. [Errno 2] Không có lỗi thư mục hoặc tệp như vậy thường được đưa ra bởi thư viện os. Lỗi này cho bạn biết rằng bạn đang cố truy cập một tệp hoặc thư mục không tồn tại . Để khắc phục lỗi này, hãy kiểm tra xem bạn có đang tham chiếu đúng tệp hoặc thư mục trong chương trình của mình không.

Khi bạn mở một tệp để viết bằng Python nếu tệp đó không tồn tại?

Để tạo một tệp mới trong Python, hãy sử dụng phương thức open[], với một trong các tham số sau. "x" - Tạo - sẽ tạo tệp, trả về lỗi nếu tệp tồn tại. "a" - Nối thêm - sẽ tạo tệp nếu tệp được chỉ định không tồn tại. "w" - Viết - sẽ tạo một tệp nếu tệp được chỉ định không tồn tại

Lỗi gì được trả về nếu một tập tin không tồn tại?

Việc cố gắng đọc một tệp không tồn tại sẽ khiến bạn gặp phải Lỗi FileNotFound .

Chủ Đề