Việc đưa ra một ngoại lệ có thoát khỏi một hàm trong Python không?

Các chức năng được mô tả trong chương này sẽ cho phép bạn xử lý và đưa ra các ngoại lệ Python. Điều quan trọng là phải hiểu một số điều cơ bản về xử lý ngoại lệ Python. Nó hoạt động giống như biến POSIX

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2. có một chỉ báo chung [trên mỗi luồng] về lỗi cuối cùng đã xảy ra. Hầu hết các chức năng API C không xóa điều này khi thành công, nhưng sẽ đặt nó để chỉ ra nguyên nhân gây ra lỗi khi thất bại. Hầu hết các hàm C API cũng trả về một chỉ báo lỗi, thường là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 nếu chúng được cho là trả về một con trỏ hoặc
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu chúng trả về một số nguyên [ngoại lệ. các hàm
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
5 trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
6 nếu thành công và
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thất bại]

Cụ thể, chỉ báo lỗi bao gồm ba con trỏ đối tượng. loại ngoại lệ, giá trị của ngoại lệ và đối tượng truy nguyên. Bất kỳ con trỏ nào trong số đó có thể là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 nếu không được đặt [mặc dù một số kết hợp bị cấm, ví dụ: bạn không thể có truy nguyên không phải
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 nếu loại ngoại lệ là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3]

Khi một chức năng phải bị lỗi vì một số chức năng mà nó gọi là không thành công, nó thường không đặt chỉ báo lỗi; . Nó chịu trách nhiệm xử lý lỗi và xóa ngoại lệ hoặc quay lại sau khi dọn sạch mọi tài nguyên mà nó nắm giữ [chẳng hạn như tham chiếu đối tượng hoặc cấp phát bộ nhớ]; . Nếu quay lại do lỗi, điều quan trọng là phải cho người gọi biết rằng lỗi đã được đặt. Nếu lỗi không được xử lý hoặc phổ biến cẩn thận, các lệnh gọi bổ sung vào API Python/C có thể không hoạt động như dự kiến ​​và có thể thất bại theo những cách bí ẩn

Ghi chú

Chỉ báo lỗi không phải là kết quả của. Cái trước tương ứng với một ngoại lệ chưa bị bắt [và do đó vẫn đang lan truyền], trong khi cái sau trả về một ngoại lệ sau khi nó bị bắt [và do đó đã ngừng lan truyền]

In ấn và thanh toán bù trừ

void PyErr_Clear[]
Một phần của.

Xóa chỉ báo lỗi. Nếu chỉ báo lỗi không được đặt, sẽ không có hiệu lực

void PyErr_PrintEx[int set_sys_last_vars]
Part of the .

In truy nguyên tiêu chuẩn tới

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2 và xóa chỉ báo lỗi. Trừ khi lỗi là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3, trong trường hợp đó, không có dấu vết nào được in và quy trình Python sẽ thoát với mã lỗi được chỉ định bởi đối tượng
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

Chỉ gọi chức năng này khi chỉ báo lỗi được đặt. Nếu không nó sẽ gây ra một lỗi nghiêm trọng

Nếu set_sys_last_vars khác không, các biến và sẽ được đặt thành loại, giá trị và truy xuất ngược của ngoại lệ được in tương ứng

void PyErr_Print[]
Một phần của.

Bí danh cho

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
8

void PyErr_WriteUnraisable[ *obj]
Part of the .

Gọi bằng ngoại lệ hiện tại và đối số obj

Chức năng tiện ích này in một thông báo cảnh báo tới

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2 khi một ngoại lệ đã được đặt nhưng trình thông dịch thực sự không thể đưa ra ngoại lệ. Nó được sử dụng, ví dụ, khi một ngoại lệ xảy ra trong một phương thức
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
21

Hàm được gọi với một đối số duy nhất obj xác định ngữ cảnh xảy ra ngoại lệ không thể kích hoạt. Nếu có thể, repr của obj sẽ được in trong thông báo cảnh báo

Một ngoại lệ phải được đặt khi gọi chức năng này

Tăng ngoại lệ

Các chức năng này giúp bạn đặt chỉ báo lỗi của luồng hiện tại. Để thuận tiện, một số hàm này sẽ luôn trả về một con trỏ

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 để sử dụng trong câu lệnh
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
23

void PyErr_SetString[ *loại, const char *message]
Part of the .

Đây là cách phổ biến nhất để đặt chỉ báo lỗi. Đối số đầu tiên chỉ định loại ngoại lệ; . g.

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
24. Bạn không cần tăng số lượng tham chiếu của nó. Đối số thứ hai là một thông báo lỗi;

void PyErr_SetObject[ *loại, *value]
Part of the .

Hàm này tương tự nhưng cho phép bạn chỉ định một đối tượng Python tùy ý cho “giá trị” của ngoại lệ

*PyErr_Format[ *ngoại lệ, const char *format, ...]
Trả về giá trị. Luôn NULL. một phần của.

Hàm này đặt chỉ báo lỗi và trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. ngoại lệ phải là một lớp ngoại lệ Python. Định dạng và các tham số tiếp theo giúp định dạng thông báo lỗi; . định dạng là một chuỗi mã hóa ASCII

*PyErr_FormatV[ *ngoại lệ, const char *format, va_list vargs]
Return value: Always NULL. Part of the since version 3.5.

Tương tự như , nhưng sử dụng đối số

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
30 thay vì số lượng đối số thay đổi

Mới trong phiên bản 3. 5

void PyErr_SetNone[ *loại]
Part of the .

Đây là cách viết tắt của

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
31

int PyErr_BadArgument[]
Một phần của.

Đây là cách viết tắt của

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
32, trong đó thông báo cho biết rằng một hoạt động tích hợp đã được gọi với một đối số không hợp lệ. Nó chủ yếu là để sử dụng nội bộ

*PyErr_NoMemory[]
Giá trị trả về. Luôn NULL. một phần của.

Đây là cách viết tắt của

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
33;

*PyErr_SetFromErrno[ *loại]
Return value: Always NULL. Part of the .

Đây là một chức năng tiện lợi để đưa ra một ngoại lệ khi một chức năng thư viện C đã trả về lỗi và đặt biến C

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2. Nó xây dựng một đối tượng tuple có mục đầu tiên là giá trị số nguyên
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2 và mục thứ hai là thông báo lỗi tương ứng [nhận được từ
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
38], sau đó gọi
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
39. Trên Unix, khi giá trị
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
2 là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
41, biểu thị cuộc gọi hệ thống bị gián đoạn, cuộc gọi này và nếu điều đó đặt chỉ báo lỗi, hãy để nó được đặt thành đó. Hàm luôn trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3, do đó, hàm bao quanh lệnh gọi hệ thống có thể ghi
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
44 khi lệnh gọi hệ thống trả về lỗi

*PyErr_SetFromErrnoWithFilenameObject[ *loại, *filenameObject]
Return value: Always NULL. Part of the .

Tương tự như , với hành vi bổ sung là nếu tên tệpObject không phải là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3, thì nó được chuyển đến hàm tạo của loại dưới dạng tham số thứ ba. Trong trường hợp ngoại lệ, điều này được sử dụng để xác định thuộc tính
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
48 của trường hợp ngoại lệ

*PyErr_SetFromErrnoWithFilenameObjects[ *loại, *filenameObject, *filenameObject2]
Return value: Always NULL. Part of the since version 3.7.

Tương tự như , nhưng lấy một đối tượng tên tệp thứ hai, để phát sinh lỗi khi một hàm nhận hai tên tệp không thành công

Mới trong phiên bản 3. 4

*PyErr_SetFromErrnoWithFilename[ *loại, const char *filename]
Return value: Always NULL. Part of the .

Tương tự như , nhưng tên tệp được cung cấp dưới dạng chuỗi C. tên tệp được giải mã từ

*PyErr_SetFromWindowsErr[int ierr]
Return value: Always NULL. Part of the on Windows since version 3.7.

Đây là một chức năng thuận tiện để nâng cao. Nếu được gọi với ierr là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7, mã lỗi được trả về bởi lệnh gọi tới
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
53 sẽ được sử dụng thay thế. Nó gọi hàm Win32
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
54 để truy xuất mô tả Windows về mã lỗi do ierr hoặc
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
53 cung cấp, sau đó nó xây dựng một đối tượng bộ có mục đầu tiên là giá trị ierr và mục thứ hai là thông báo lỗi tương ứng [nhận được từ
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
54], sau đó . Hàm này luôn trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

các cửa sổ

*PyErr_SetExcFromWindowsErr[ *loại, int ierr]
Return value: Always NULL. Part of the on Windows since version 3.7.

Tương tự như , với một tham số bổ sung chỉ định loại ngoại lệ sẽ được nêu ra

các cửa sổ

*PyErr_SetFromWindowsErrWithFilename[int ierr, const char *filename]
Return value: Always NULL. Part of the on Windows since version 3.7.

Tương tự như

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
60, nhưng tên tệp được cung cấp dưới dạng chuỗi C. tên tệp được giải mã từ mã hóa hệ thống tệp []

các cửa sổ

*PyErr_SetExcFromWindowsErrWithFilenameObject[ *loại, int ierr, *filename]
Return value: Always NULL. Part of the on Windows since version 3.7.

Tương tự như

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
60, với một tham số bổ sung chỉ định loại ngoại lệ sẽ được nâng lên

các cửa sổ

*PyErr_SetExcFromWindowsErrWithFilenameObjects[ *loại, int ierr, *filename, *filename2]
Return value: Always NULL. Part of the on Windows since version 3.7.

Tương tự như , nhưng chấp nhận đối tượng tên tệp thứ hai

các cửa sổ

Mới trong phiên bản 3. 4

*PyErr_SetExcFromWindowsErrWithFilename[ *loại, int ierr, const char *filename]
Return value: Always NULL. Part of the on Windows since version 3.7.

Tương tự như , với một tham số bổ sung chỉ định loại ngoại lệ sẽ được nêu ra

các cửa sổ

*PyErr_SetImportError[ *tin nhắn, *name, *path]
Return value: Always NULL. Part of the since version 3.7.

Đây là một chức năng thuận tiện để nâng cao. msg sẽ được đặt làm chuỗi thông báo ngoại lệ. tên và đường dẫn, cả hai đều có thể là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3, sẽ được đặt làm thuộc tính
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
68 và
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
69 tương ứng

Mới trong phiên bản 3. 3

*PyErr_SetImportErrorSubclass[ *ngoại lệ, *msg, *name, *path]
Return value: Always NULL. Part of the since version 3.6.

Rất giống nhưng chức năng này cho phép chỉ định một phân lớp để nâng cao

Mới trong phiên bản 3. 6

void PyErr_SyntaxLocationObject[ *tên tệp, int lineno, int col_offset]

Set file, line, and offset information for the current exception. If the current exception is not a , then it sets additional attributes, which make the exception printing subsystem think the exception is a .

Mới trong phiên bản 3. 4

void PyErr_SyntaxLocationEx[const char *filename, int lineno, int col_offset]
Part of the since version 3.7.

Giống như, nhưng tên tệp là một chuỗi byte được giải mã từ

Mới trong phiên bản 3. 2

void PyErr_SyntaxLocation[const char *filename, int lineno]
Part of the .

Like , nhưng thông số col_offset bị bỏ qua

void PyErr_BadInternalCall[]
Một phần của.

Đây là cách viết tắt của

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
76, trong đó thông báo chỉ ra rằng một hoạt động nội bộ [e. g. một hàm API Python/C] đã được gọi với một đối số không hợp lệ. Nó chủ yếu là để sử dụng nội bộ

đưa ra cảnh báo

Sử dụng các chức năng này để đưa ra cảnh báo từ mã C. Chúng phản ánh các chức năng tương tự được xuất bởi mô-đun Python. Họ thường in một thông báo cảnh báo tới sys. tiêu chuẩn; . Cũng có thể các chức năng đưa ra một ngoại lệ do sự cố với bộ máy cảnh báo. Giá trị trả về là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu không có ngoại lệ nào được đưa ra hoặc
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu có ngoại lệ được đưa ra. [Không thể xác định liệu thông báo cảnh báo có thực sự được in hay không, cũng như lý do ngoại lệ là gì; đây là sự cố ý. ] Nếu một ngoại lệ được đưa ra, người gọi nên thực hiện xử lý ngoại lệ thông thường của nó [ví dụ: các tham chiếu được sở hữu và trả về giá trị lỗi]

int PyErr_WarnEx[ *danh mục, const char *message, stack_level]
Part of the .

Đưa ra thông báo cảnh báo. Đối số danh mục là danh mục cảnh báo [xem bên dưới] hoặc

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3; . stack_level là một số dương cho một số khung ngăn xếp; . Một stack_level của 1 là chức năng gọi , 2 là chức năng trên đó, v.v.

Danh mục cảnh báo phải là phân lớp của

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
33; . Các danh mục cảnh báo tiêu chuẩn của Python có sẵn dưới dạng các biến toàn cục có tên được liệt kê tại

Để biết thông tin về kiểm soát cảnh báo, hãy xem tài liệu dành cho mô-đun và tùy chọn trong tài liệu dòng lệnh. Không có API C để kiểm soát cảnh báo

int PyErr_WarnExplicitObject[ *danh mục, *message, *filename, int lineno, *module, *registry]

Issue a warning message with explicit control over all warning attributes. This is a straightforward wrapper around the Python function ; see there for more information. The module and registry arguments may be set to

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 to get the default effect described there.

Mới trong phiên bản 3. 4

int PyErr_WarnExplicit[ *danh mục, const char *message, const char *filename, int lineno, const char *module, *registry]
Part of the .

Tương tự ngoại trừ thông báo và mô-đun đó là các chuỗi được mã hóa UTF-8 và tên tệp được giải mã từ

int PyErr_WarnFormat[ *danh mục, stack_level, const char *format, ...]
Một phần của.

Chức năng tương tự như , nhưng dùng để định dạng thông báo cảnh báo. định dạng là một chuỗi mã hóa ASCII

Mới trong phiên bản 3. 2

int PyErr_ResourceWarning[ *nguồn, stack_level, const char *format, ...]
Một phần của phiên bản 3. 6.

Chức năng tương tự như , nhưng danh mục là và nó chuyển nguồn tới

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
36

Mới trong phiên bản 3. 6

Truy vấn chỉ báo lỗi

*PyErr_Occurred[]
Giá trị trả về. Tài liệu tham khảo mượn. một phần của.

Kiểm tra xem chỉ báo lỗi có được đặt không. Nếu được đặt, hãy trả về loại ngoại lệ [đối số đầu tiên cho lệnh gọi cuối cùng tới một trong các hàm

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
37 hoặc tới ]. Nếu không được đặt, hãy trả lại
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Bạn không sở hữu một tham chiếu đến giá trị trả về, vì vậy bạn không cần nó

Người gọi phải giữ GIL

Ghi chú

Không so sánh giá trị trả về với một ngoại lệ cụ thể; . [Việc so sánh có thể dễ dàng thất bại vì ngoại lệ có thể là một thể hiện thay vì một lớp, trong trường hợp là một ngoại lệ của lớp hoặc nó có thể là một lớp con của ngoại lệ dự kiến. ]

int PyErr_ExceptionMatches[ *exc]
Part of the .

Tương đương với

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
02. Điều này chỉ nên được gọi khi một ngoại lệ thực sự được thiết lập;

int PyErr_GivenExceptionMatches[ *đã cho, *exc]
Part of the .

Trả về true nếu ngoại lệ đã cho khớp với loại ngoại lệ trong excel. Nếu exc là một đối tượng của lớp, điều này cũng trả về true khi đã cho là một thể hiện của một lớp con. Nếu exc là một bộ, thì tất cả các loại ngoại lệ trong bộ [và đệ quy trong các bộ con] đều được tìm kiếm để khớp

void PyErr_Fetch[ **ptype, **pvalue, **ptraceback]
Part of the .

Truy xuất chỉ báo lỗi thành ba biến có địa chỉ được truyền. Nếu chỉ báo lỗi không được đặt, hãy đặt cả ba biến thành

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Nếu nó được đặt, nó sẽ bị xóa và bạn sở hữu một tham chiếu đến từng đối tượng được truy xuất. Đối tượng giá trị và truy nguyên có thể là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 ngay cả khi đối tượng loại không

Ghi chú

Chức năng này thường chỉ được sử dụng bởi mã cần bắt ngoại lệ hoặc mã cần lưu và khôi phục chỉ báo lỗi tạm thời, e. g

{
   PyObject *type, *value, *traceback;
   PyErr_Fetch[&type, &value, &traceback];

   /* .. code that might produce other errors .. */

   PyErr_Restore[type, value, traceback];
}

void PyErr_Restore[ *loại, *value, *traceback]
Part of the .

Đặt chỉ báo lỗi từ ba đối tượng. Nếu chỉ báo lỗi đã được đặt, nó sẽ bị xóa trước. Nếu các đối tượng là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3, chỉ báo lỗi sẽ bị xóa. Không chuyển một loại
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 và giá trị không phải
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 hoặc truy nguyên. Loại ngoại lệ phải là một lớp. Không chuyển loại hoặc giá trị ngoại lệ không hợp lệ. [Vi phạm các quy tắc này sẽ gây ra các vấn đề tế nhị sau này. ] Cuộc gọi này lấy đi một tham chiếu đến từng đối tượng. bạn phải sở hữu một tham chiếu đến từng đối tượng trước cuộc gọi và sau cuộc gọi, bạn không còn sở hữu những tham chiếu này nữa. [Nếu bạn không hiểu điều này, đừng sử dụng chức năng này. tôi đã cảnh báo bạn. ]

Ghi chú

Chức năng này thường chỉ được sử dụng bởi mã cần lưu và khôi phục tạm thời chỉ báo lỗi. Sử dụng để lưu chỉ báo lỗi hiện tại

void PyErr_NormalizeException[ **exc, **val, **tb]
Part of the .

Trong một số trường hợp nhất định, các giá trị được trả về bên dưới có thể là "không chuẩn hóa", nghĩa là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
10 là một đối tượng lớp nhưng
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
11 không phải là một thể hiện của cùng một lớp. Hàm này có thể được sử dụng để khởi tạo lớp trong trường hợp đó. Nếu các giá trị đã được chuẩn hóa, không có gì xảy ra. Việc chuẩn hóa bị trì hoãn được thực hiện để cải thiện hiệu suất

Ghi chú

Hàm này không ngầm đặt thuộc tính

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
12 trên giá trị ngoại lệ. Nếu muốn đặt truy ngược thích hợp, cần có đoạn mã bổ sung sau

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}

*PyErr_GetHandledException[void]
Part of the since version 3.11.

Truy xuất phiên bản ngoại lệ đang hoạt động, như sẽ được trả về bởi. Điều này đề cập đến một ngoại lệ đã bị bắt, không phải là một ngoại lệ mới được đưa ra. Trả về một tham chiếu mới cho ngoại lệ hoặc

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Không sửa đổi trạng thái ngoại lệ của trình thông dịch

Ghi chú

Chức năng này thường không được sử dụng bởi mã muốn xử lý ngoại lệ. Thay vào đó, nó có thể được sử dụng khi mã cần lưu và khôi phục trạng thái ngoại lệ tạm thời. Sử dụng để khôi phục hoặc xóa trạng thái ngoại lệ

Mới trong phiên bản 3. 11

void PyErr_SetHandledException[ *exc]
Part of the since version 3.11.

Đặt ngoại lệ đang hoạt động, như đã biết từ

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
13. Điều này đề cập đến một ngoại lệ đã bị bắt, không phải là một ngoại lệ mới được đưa ra. Để xóa trạng thái ngoại lệ, vượt qua
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

Ghi chú

Chức năng này thường không được sử dụng bởi mã muốn xử lý ngoại lệ. Thay vào đó, nó có thể được sử dụng khi mã cần lưu và khôi phục trạng thái ngoại lệ tạm thời. Sử dụng để có được trạng thái ngoại lệ

Mới trong phiên bản 3. 11

void PyErr_GetExcInfo[ **ptype, **pvalue, **ptraceback]
Part of the since version 3.7.

Truy xuất biểu diễn kiểu cũ của thông tin ngoại lệ, như đã biết từ. Điều này đề cập đến một ngoại lệ đã bị bắt, không phải là một ngoại lệ mới được đưa ra. Trả về các tham chiếu mới cho ba đối tượng, bất kỳ đối tượng nào trong số đó có thể là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Không sửa đổi trạng thái thông tin ngoại lệ. Chức năng này được giữ để tương thích ngược. thích sử dụng

Ghi chú

Chức năng này thường không được sử dụng bởi mã muốn xử lý ngoại lệ. Thay vào đó, nó có thể được sử dụng khi mã cần lưu và khôi phục trạng thái ngoại lệ tạm thời. Sử dụng để khôi phục hoặc xóa trạng thái ngoại lệ

Mới trong phiên bản 3. 3

void PyErr_SetExcInfo[ *loại, *value, *traceback]
Part of the since version 3.7.

Đặt thông tin ngoại lệ, như đã biết từ

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
1. Điều này đề cập đến một ngoại lệ đã bị bắt, không phải là một ngoại lệ mới được đưa ra. Hàm này đánh cắp các tham chiếu của các đối số. Để xóa trạng thái ngoại lệ, hãy vượt qua
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 cho cả ba đối số. Chức năng này được giữ để tương thích ngược. thích sử dụng

Ghi chú

Chức năng này thường không được sử dụng bởi mã muốn xử lý ngoại lệ. Thay vào đó, nó có thể được sử dụng khi mã cần lưu và khôi phục trạng thái ngoại lệ tạm thời. Sử dụng để đọc trạng thái ngoại lệ

Mới trong phiên bản 3. 3

Đã thay đổi trong phiên bản 3. 11. Các đối số

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
27 và
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
28 không còn được sử dụng nữa và có thể là NULL. Trình thông dịch hiện lấy chúng từ trường hợp ngoại lệ [đối số
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
29]. Hàm vẫn đánh cắp tham chiếu của cả ba đối số.

Xử lý tín hiệu

int PyErr_CheckSignals[]
Một phần của.

Chức năng này tương tác với xử lý tín hiệu của Python

Nếu hàm được gọi từ luồng chính và bên dưới trình thông dịch Python chính, nó sẽ kiểm tra xem tín hiệu đã được gửi đến các quy trình hay chưa và nếu có, hãy gọi trình xử lý tín hiệu tương ứng. Nếu mô-đun được hỗ trợ, điều này có thể gọi trình xử lý tín hiệu được viết bằng Python

Hàm cố gắng xử lý tất cả các tín hiệu đang chờ xử lý, sau đó trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7. Tuy nhiên, nếu trình xử lý tín hiệu Python đưa ra một ngoại lệ, chỉ báo lỗi sẽ được đặt và hàm trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 ngay lập tức [do đó, các tín hiệu đang chờ xử lý khác có thể chưa được xử lý. họ sẽ có trong lần gọi tiếp theo]

Nếu hàm được gọi từ một luồng không phải luồng chính hoặc dưới trình thông dịch Python không chính, thì hàm này không thực hiện gì và trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7

Chức năng này có thể được gọi bằng mã C chạy dài muốn bị gián đoạn bởi yêu cầu của người dùng [chẳng hạn như bằng cách nhấn Ctrl-C]

Ghi chú

Trình xử lý tín hiệu Python mặc định cho

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
35 đưa ra ngoại lệ

void PyErr_SetInterrupt[]
Một phần của.

Mô phỏng tác động của tín hiệu

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
35 đến. Điều này tương đương với
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
38

Ghi chú

Chức năng này không đồng bộ-tín hiệu-an toàn. Nó có thể được gọi mà không cần và từ bộ xử lý tín hiệu C

int PyErr_SetInterruptEx[int signum]
Part of the since version 3.10.

Mô phỏng hiệu ứng của tín hiệu đến. Lần gọi tiếp theo, trình xử lý tín hiệu Python cho số tín hiệu đã cho sẽ được gọi

Chức năng này có thể được gọi bằng mã C thiết lập xử lý tín hiệu của riêng nó và muốn các trình xử lý tín hiệu Python được gọi như mong đợi khi có yêu cầu ngắt [ví dụ: khi người dùng nhấn Ctrl-C để ngắt một thao tác]

Nếu tín hiệu đã cho không được xử lý bởi Python [nó được đặt thành hoặc ], nó sẽ bị bỏ qua

Nếu signum nằm ngoài phạm vi cho phép của số signal, thì

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 được trả về. Mặt khác,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 được trả lại. Chỉ báo lỗi không bao giờ bị thay đổi bởi chức năng này

Ghi chú

Chức năng này không đồng bộ-tín hiệu-an toàn. Nó có thể được gọi mà không cần và từ bộ xử lý tín hiệu C

Mới trong phiên bản 3. 10

int PySignal_SetWakeupFd[int fd]

This utility function specifies a file descriptor to which the signal number is written as a single byte whenever a signal is received. fd must be non-blocking. It returns the previous such file descriptor.

Giá trị

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 tắt tính năng này; . Điều này tương đương với trong Python, nhưng không có bất kỳ lỗi nào khi kiểm tra. fd phải là một bộ mô tả tệp hợp lệ. Chức năng chỉ nên được gọi từ chủ đề chính

Đã thay đổi trong phiên bản 3. 5. Trên Windows, chức năng này hiện cũng hỗ trợ tay cầm ổ cắm.

Các lớp ngoại lệ

*PyErr_NewException[const char *name, *base, *dict]
Return value: New reference. Part of the .

Hàm tiện ích này tạo và trả về một lớp ngoại lệ mới. Đối số tên phải là tên của ngoại lệ mới, một chuỗi C có dạng

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
46. Các đối số cơ sở và dict thường là
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Điều này tạo ra một đối tượng lớp có nguồn gốc từ [có thể truy cập trong C dưới dạng
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
35]

Thuộc tính

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
50 của lớp mới được đặt thành phần đầu tiên [đến dấu chấm cuối cùng] của đối số tên và tên lớp được đặt thành phần cuối cùng [sau dấu chấm cuối cùng]. Đối số cơ sở có thể được sử dụng để chỉ định các lớp cơ sở thay thế; . Đối số dict có thể được sử dụng để chỉ định một từ điển các biến và phương thức của lớp

*PyErr_NewExceptionWithDoc[const char *name, const char *doc, *base, *dict]
Return value: New reference. Part of the .

Giống như , ngoại trừ lớp ngoại lệ mới có thể dễ dàng được cung cấp một chuỗi tài liệu. Nếu tài liệu không phải là ____33, nó sẽ được sử dụng làm chuỗi tài liệu cho lớp ngoại lệ

Mới trong phiên bản 3. 2

Đối tượng ngoại lệ

*PyException_GetTraceback[ *ex]
Return value: New reference. Part of the .

Trả lại truy nguyên được liên kết với ngoại lệ dưới dạng tham chiếu mới, có thể truy cập được từ Python cho đến

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
12. Nếu không có dấu vết liên quan, điều này sẽ trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

int PyException_SetTraceback[ *ex, *tb]
Part of the .

Đặt truy nguyên được liên kết với ngoại lệ thành tb. Sử dụng

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
55 để xóa nó

*PyException_GetContext[ *ex]
Return value: New reference. Part of the .

Trả về ngữ cảnh [một trường hợp ngoại lệ khác trong quá trình xử lý cũ đã được nêu ra] được liên kết với ngoại lệ dưới dạng tham chiếu mới, có thể truy cập từ Python đến

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
56. Nếu không có ngữ cảnh liên quan, điều này trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

void PyException_SetContext[ *ex, *ctx]
Part of the .

Đặt bối cảnh được liên kết với ngoại lệ thành ctx. Sử dụng

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 để xóa nó. Không có loại kiểm tra để đảm bảo rằng ctx là một trường hợp ngoại lệ. Điều này đánh cắp một tham chiếu đến ctx

*PyException_GetCause[ *ex]
Return value: New reference. Part of the .

Trả về nguyên nhân [có thể là trường hợp ngoại lệ hoặc , được đặt bởi

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
60] được liên kết với ngoại lệ dưới dạng tham chiếu mới, có thể truy cập được từ Python đến
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
61

void PyException_SetCause[ *ex, *cause]
Part of the .

Đặt nguyên nhân liên quan đến ngoại lệ thành nguyên nhân. Sử dụng

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3 để xóa nó. Không có loại kiểm tra để đảm bảo rằng nguyên nhân là một trường hợp ngoại lệ hoặc. Điều này đánh cắp một tài liệu tham khảo để gây ra

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
64 được đặt hoàn toàn thành
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
65 bởi chức năng này

Đối tượng ngoại lệ Unicode

Các chức năng sau được sử dụng để tạo và sửa đổi các ngoại lệ Unicode từ C

*PyUnicodeDecodeError_Create[const char *encoding, const char *object, length, start, end, const char *reason]
Return value: New reference. Part of the .

Tạo một đối tượng với các thuộc tính mã hóa, đối tượng, độ dài, bắt đầu, kết thúc và lý do. mã hóa và lý do là các chuỗi được mã hóa UTF-8

*PyUnicodeDecodeError_GetEncoding[ *exc]
*PyUnicodeEncodeError_GetEncoding[ *exc]
Return value: New reference. Part of the .

Trả về thuộc tính mã hóa của đối tượng ngoại lệ đã cho

*PyUnicodeDecodeError_GetObject[ *exc]
*PyUnicodeEncodeError_GetObject[ *exc]
*PyUnicodeTranslateError_GetObject[ *exc]
Return value: New reference. Part of the .

Trả về thuộc tính đối tượng của đối tượng ngoại lệ đã cho

int PyUnicodeDecodeError_GetStart[ *exc, *start]
int PyUnicodeEncodeError_GetStart[ *exc, *start]
int PyUnicodeTranslateError_GetStart[ *exc, *start]
Part of the .

Lấy thuộc tính bắt đầu của đối tượng ngoại lệ đã cho và đặt nó vào *start. bắt đầu không được là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thành công,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu thất bại

int PyUnicodeDecodeError_SetStart[ *exc, start]
int PyUnicodeEncodeError_SetStart[ *exc, start]
int PyUnicodeTranslateError_SetStart[ *exc, start]
Part of the .

Đặt thuộc tính bắt đầu của đối tượng ngoại lệ đã cho để bắt đầu. Trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thành công,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu thất bại

int PyUnicodeDecodeError_GetEnd[ *exc, *end]
int PyUnicodeEncodeError_GetEnd[ *exc, *end]
int PyUnicodeTranslateError_GetEnd[ *exc, *end]
Part of the .

Lấy thuộc tính end của đối tượng ngoại lệ đã cho và đặt nó vào *end. kết thúc không được là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3. Trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thành công,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu thất bại

int PyUnicodeDecodeError_SetEnd[ *exc, end]
int PyUnicodeEncodeError_SetEnd[ *exc, end]
int PyUnicodeTranslateError_SetEnd[ *exc, end]
Part of the .

Đặt thuộc tính end của đối tượng ngoại lệ đã cho thành end. Trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thành công,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu thất bại

*PyUnicodeDecodeError_GetReason[ *exc]
*PyUnicodeEncodeError_GetReason[ *exc]
*PyUnicodeTranslateError_GetReason[ *exc]
Return value: New reference. Part of the .

Trả về thuộc tính lý do của đối tượng ngoại lệ đã cho

int PyUnicodeDecodeError_SetReason[ *exc, const char *reason]
int PyUnicodeEncodeError_SetReason[ *exc, const char *reason]
int PyUnicodeTranslateError_SetReason[ *exc, const char *reason]
Part of the .

Đặt thuộc tính lý do của đối tượng ngoại lệ đã cho thành lý do. Trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
7 nếu thành công,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
4 nếu thất bại

Kiểm soát đệ quy

Hai chức năng này cung cấp một cách để thực hiện các cuộc gọi đệ quy an toàn ở cấp độ C, cả trong lõi và trong các mô-đun mở rộng. Chúng cần thiết nếu mã đệ quy không nhất thiết phải gọi mã Python [tự động theo dõi độ sâu đệ quy của nó]. Chúng cũng không cần thiết cho việc triển khai tp_call vì chúng đảm nhiệm việc xử lý đệ quy

int Py_EnterRecursiveCall[const char *where]
Part of the since version 3.9.

Đánh dấu một điểm mà một cuộc gọi cấp C đệ quy sắp được thực hiện

Nếu

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
79 được xác định, chức năng này sẽ kiểm tra xem ngăn xếp hệ điều hành có bị tràn hay không bằng cách sử dụng. Trong trường hợp này, nó đặt a và trả về giá trị khác không

Sau đó, hàm sẽ kiểm tra xem có đạt đến giới hạn đệ quy không. Nếu trường hợp này xảy ra, a được đặt và giá trị khác 0 được trả về. Nếu không, số không được trả về

trong đó phải là một chuỗi được mã hóa UTF-8, chẳng hạn như

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
83 để được nối với thông báo do giới hạn độ sâu đệ quy gây ra

Đã thay đổi trong phiên bản 3. 9. Chức năng này hiện cũng có sẵn trong API giới hạn.

void Py_LeaveRecursiveCall[void]
Part of the since version 3.9.

kết thúc một. Phải được gọi một lần cho mỗi lần gọi thành công

Đã thay đổi trong phiên bản 3. 9. Chức năng này hiện cũng có sẵn trong API giới hạn.

Việc triển khai đúng cách cho các loại vùng chứa yêu cầu xử lý đệ quy đặc biệt. Ngoài việc bảo vệ ngăn xếp, còn cần theo dõi các đối tượng để ngăn chặn chu kỳ. Hai chức năng sau hỗ trợ chức năng này. Thực tế, đây là những C tương đương với

int Py_ReprEnter[ *đối tượng]
Part of the .

Được gọi khi bắt đầu thực hiện để phát hiện các chu kỳ

Nếu đối tượng đã được xử lý, hàm trả về một số nguyên dương. Trong trường hợp đó, việc triển khai sẽ trả về một đối tượng chuỗi biểu thị một chu kỳ. Ví dụ, các đối tượng trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
93 và các đối tượng trả về
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
95

Hàm sẽ trả về số nguyên âm nếu đạt đến giới hạn đệ quy. Trong trường hợp đó, việc triển khai thường trả về

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
3

Mặt khác, hàm trả về 0 và quá trình triển khai có thể tiếp tục bình thường

void Py_ReprLeave[ *đối tượng]
Part of the .

kết thúc một. Phải được gọi một lần cho mỗi lần gọi trả về số không

Ngoại lệ tiêu chuẩn

Tất cả các ngoại lệ tiêu chuẩn của Python đều có sẵn dưới dạng biến toàn cục có tên là

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
201 theo sau là tên ngoại lệ Python. Chúng có loại * ; . Để đầy đủ, đây là tất cả các biến.

Tên C

Tên Python

ghi chú

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
202

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
35

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
206

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
208

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
210

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
212

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
214

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
216

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
218

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
220

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
222

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
224

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
226

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
228

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
230

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
232

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
234

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
236

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
238

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
240

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
242

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
244

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
246

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
248

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
250

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
252

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
254

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
256

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
258

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
260

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
262

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
264

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
266

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
268

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
270

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
272

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
274

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
24

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
278

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
280

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
282

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
284

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
286

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
288

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
290

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
292

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
294

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
296

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
298

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
300

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
302

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
304

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
306

Mới trong phiên bản 3. 3. ______3212,

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
214,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
218,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
222,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
220,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
224,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
226,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
230,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
232,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
244,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
246,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
260,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
268,
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
270 và
if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
290 đã được giới thiệu sau PEP 3151.

Mới trong phiên bản 3. 5. ______3278 và

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
272.

Mới trong phiên bản 3. 6. ______3256.

Đây là những bí danh tương thích với

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
264

Tên C

ghi chú

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
327

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
328

if [tb != NULL] {
  PyException_SetTraceback[val, tb];
}
329

Đã thay đổi trong phiên bản 3. 3. Các bí danh này từng là các loại ngoại lệ riêng biệt.

ghi chú

1[,,,,]

Đây là một lớp cơ sở cho các ngoại lệ tiêu chuẩn khác

Chỉ được xác định trên Windows;

Python có thoát sau ngoại lệ không?

Nó kế thừa từ BaseException thay vì Exception để không vô tình bị mã bắt Exception. Đ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 ; .

Điều gì xảy ra khi Python tăng ngoại lệ?

Đôi khi bạn muốn Python đưa ra một ngoại lệ tùy chỉnh để xử lý lỗi. Bạn có thể làm điều này bằng cách kiểm tra một điều kiện và đưa ra ngoại lệ, nếu điều kiện là True. Ngoại lệ được đưa ra thường cảnh báo người dùng hoặc ứng dụng gọi điện .

Python có tiếp tục sau khi tăng không?

Sau đó nếu xảy ra lỗi, nó sẽ tiếp tục với tệp tiếp theo . Đây là một ví dụ hoàn hảo về lý do tại sao bạn nên sử dụng câu lệnh with ở đây để mở tệp. Khi bạn mở tệp bằng open[] , nhưng gặp lỗi, tệp sẽ vẫn mở mãi mãi.

Chủ Đề