Câu lệnh 'with' và Trình quản lý ngữ cảnh trong Python, hai cách để triển khai giao thức quản lý ngữ cảnh
Tải xuống PDF miễn phí. Bảng cheat Python 3
Ngoại lệ so với lỗi cú pháp
Lỗi cú pháp xảy ra khi trình phân tích cú pháp phát hiện một câu lệnh không chính xác. Quan sát ví dụ sau
>>> print[ 0 / 0 ]]
File "", line 1
print[ 0 / 0 ]]
^
SyntaxError: invalid syntax
Mũi tên chỉ nơi trình phân tích cú pháp gặp phải lỗi cú pháp. Trong ví dụ này, có quá nhiều dấu ngoặc. Xóa nó và chạy lại mã của bạn
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
Lần này, bạn gặp phải một lỗi ngoại lệ. Loại lỗi này xảy ra bất cứ khi nào mã Python đúng cú pháp dẫn đến lỗi. Dòng cuối cùng của thông báo cho biết bạn gặp phải loại lỗi ngoại lệ nào
Thay vì hiển thị thông báo
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
6, Python nêu chi tiết loại lỗi ngoại lệ đã gặp phải. Trong trường hợp này, đó là một x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
7. Python đi kèm với nhiều ngoại lệ tích hợp khác nhau cũng như khả năng tạo ngoại lệ tự xác địnhLoại bỏ các quảng cáoTăng một ngoại lệ
Chúng ta có thể sử dụng
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
8 để ném một ngoại lệ nếu một điều kiện xảy ra. Tuyên bố có thể được bổ sung với một ngoại lệ tùy chỉnhNếu bạn muốn đưa ra lỗi khi một điều kiện nào đó xảy ra bằng cách sử dụng
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
8, bạn có thể thực hiện như saux = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
Khi bạn chạy mã này, đầu ra sẽ như sau
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
Chương trình dừng lại và hiển thị ngoại lệ của chúng tôi trên màn hình, cung cấp manh mối về những gì đã xảy ra
Ngoại lệ Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
Thay vì đợi một chương trình bị lỗi giữa chừng, bạn cũng có thể bắt đầu bằng cách đưa ra một xác nhận trong Python. Chúng tôi
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
1 rằng một điều kiện nhất định được đáp ứng. Nếu điều kiện này trở thành Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
2, thì điều đó thật tuyệt vời. Chương trình có thể tiếp tục. Nếu điều kiện hóa ra là Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
3, bạn có thể yêu cầu chương trình đưa ra một ngoại lệ Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0Hãy xem ví dụ sau, nơi khẳng định rằng mã sẽ được thực thi trên hệ thống Linux
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
3Nếu bạn chạy mã này trên máy Linux, xác nhận sẽ vượt qua. Nếu bạn chạy mã này trên máy Windows, kết quả của xác nhận sẽ là
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
3 và kết quả sẽ như sau>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
5Trong ví dụ này, ném một ngoại lệ
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0 là điều cuối cùng mà chương trình sẽ thực hiện. Chương trình sẽ dừng lại và sẽ không tiếp tục. Nếu đó không phải là điều bạn muốn thì sao?Khối Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 và Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8. Xử lý ngoại lệ
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
Khối
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 và Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8 trong Python được sử dụng để bắt và xử lý các ngoại lệ. Python thực thi mã sau câu lệnh Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 như một phần “bình thường” của chương trình. Mã theo sau câu lệnh Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8 là phản hồi của chương trình đối với bất kỳ ngoại lệ nào trong mệnh đề Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 trước đóNhư bạn đã thấy trước đó, khi mã đúng cú pháp gặp lỗi, Python sẽ đưa ra một lỗi ngoại lệ. Lỗi ngoại lệ này sẽ làm hỏng chương trình nếu nó không được xử lý. Mệnh đề
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8 xác định cách chương trình của bạn phản ứng với các ngoại lệHàm sau có thể giúp bạn hiểu về khối
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 và Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
7>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
37 chỉ có thể chạy trên hệ thống Linux. Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
1 trong chức năng này sẽ đưa ra một ngoại lệ Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0 nếu bạn gọi nó trên một hệ điều hành khác ngoài LinuxBạn có thể cung cấp cho chức năng một
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 bằng cách sử dụng đoạn mã saux = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
2Cách bạn xử lý lỗi ở đây là đưa ra một
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
51. Nếu bạn chạy mã này trên máy Windows, bạn sẽ nhận được kết quả saux = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
4bạn không có gì. Điều tốt ở đây là chương trình không bị sập. Nhưng sẽ rất tuyệt nếu một số loại ngoại lệ xảy ra bất cứ khi nào bạn chạy mã của mình. Để đạt được điều này, bạn có thể thay đổi
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
51 thành thứ gì đó có thể tạo ra thông báo cung cấp thông tin, chẳng hạn như vậyx = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
6Thực thi mã này trên máy Windows
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
0Khi một ngoại lệ xảy ra trong một chương trình đang chạy chức năng này, chương trình sẽ tiếp tục cũng như thông báo cho bạn về thực tế là lệnh gọi chức năng không thành công
Những gì bạn không nhận thấy là loại lỗi đã được đưa ra do lệnh gọi hàm. Để biết chính xác điều gì đã xảy ra, bạn cần phải bắt lỗi mà hàm đã đưa ra
Đoạn mã sau là một ví dụ trong đó bạn chụp
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0 và xuất thông báo đó ra màn hình>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
1Chạy chức năng này trên máy Windows sẽ xuất ra kết quả như sau
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
2Thông báo đầu tiên là
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0, thông báo cho bạn rằng chức năng này chỉ có thể được thực thi trên máy Linux. Thông báo thứ hai cho bạn biết chức năng nào chưa được thực hiệnTrong ví dụ trước, bạn đã gọi một hàm do chính bạn viết. Khi bạn thực hiện chức năng, bạn đã bắt gặp ngoại lệ
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
0 và in nó ra màn hìnhĐây là một ví dụ khác khi bạn mở tệp và sử dụng ngoại lệ tích hợp sẵn
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
3Nếu tập tin. log không tồn tại, khối mã này sẽ xuất ra như sau
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
4Đây là một thông báo cung cấp thông tin và chương trình của chúng tôi sẽ vẫn tiếp tục chạy. Trong tài liệu Python, bạn có thể thấy rằng có rất nhiều ngoại lệ tích hợp sẵn mà bạn có thể sử dụng tại đây. Một ngoại lệ được mô tả trên trang đó là như sau
Ngoại lệ
56>>> print[ 0 / 0] Traceback [most recent call last]: File "", line 1, in ZeroDivisionError: integer division or modulo by zero
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 errno ENOENT
Để bắt loại ngoại lệ này và in ra màn hình, bạn có thể sử dụng đoạn mã sau
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
5Trong trường hợp này, nếu tập tin. log không tồn tại, đầu ra sẽ như sau
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
6Bạn có thể có nhiều hơn một lệnh gọi hàm trong mệnh đề
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 của mình và đoán trước việc nắm bắt các ngoại lệ khác nhau. Một điều cần lưu ý ở đây là mã trong mệnh đề Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 sẽ dừng ngay khi gặp ngoại lệCảnh báo. Bắt
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
59 ẩn tất cả các lỗi...ngay cả những lỗi hoàn toàn không mong muốn. Đây là lý do tại sao bạn nên tránh các mệnh đề Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
8 trống trong các chương trình Python của mình. Thay vào đó, bạn sẽ muốn tham khảo các lớp ngoại lệ cụ thể mà bạn muốn nắm bắt và xử lý. Bạn có thể tìm hiểu thêm về lý do tại sao đây là một ý tưởng hay trong hướng dẫn nàyNhìn vào đoạn mã sau. Ở đây, trước tiên bạn gọi hàm
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
37 rồi thử mở một tệp>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
7Nếu tệp không tồn tại, chạy mã này trên máy Windows sẽ xuất ra như sau
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
8Trong mệnh đề
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7, bạn gặp phải một ngoại lệ ngay lập tức và không đến được phần mà bạn cố gắng mở tệp. đăng nhập. Bây giờ hãy xem điều gì sẽ xảy ra khi bạn chạy mã trên máy Linux>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
6Dưới đây là những điểm chính
- Mệnh đề
7 được thực thi cho đến khi gặp phải ngoại lệ đầu tiênTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
- Bên trong mệnh đề
8 hoặc trình xử lý ngoại lệ, bạn xác định cách chương trình phản hồi ngoại lệTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
- Bạn có thể dự đoán nhiều ngoại lệ và phân biệt cách chương trình sẽ phản hồi chúng
- Tránh sử dụng mệnh đề
8 trầnTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
Mệnh đề x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
76
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
Trong Python, sử dụng câu lệnh
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
76, bạn có thể chỉ thị cho chương trình thực thi một khối mã nhất định khi không có ngoại lệNhìn vào ví dụ sau
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
0Nếu bạn chạy mã này trên hệ thống Linux, đầu ra sẽ như sau
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
1Vì chương trình không gặp ngoại lệ nào nên mệnh đề
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
76 được thực thiBạn cũng có thể
Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 để chạy mã bên trong mệnh đề x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
76 và nắm bắt các ngoại lệ có thể xảy ra ở đó.x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
2Nếu bạn thực thi mã này trên máy Linux, bạn sẽ nhận được kết quả sau
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
3Từ đầu ra, bạn có thể thấy rằng hàm
>>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
37 đã chạy. Vì không gặp trường hợp ngoại lệ nào nên cố gắng mở tệp. nhật ký đã được thực hiện. Tệp đó không tồn tại và thay vì mở tệp, bạn đã bắt gặp ngoại lệ >>> print[ 0 / 0]
Traceback [most recent call last]:
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
56Dọn dẹp sau khi sử dụng x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
23
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
Hãy tưởng tượng rằng bạn luôn phải thực hiện một số loại hành động để dọn dẹp sau khi thực thi mã của mình. Python cho phép bạn làm như vậy bằng cách sử dụng mệnh đề
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
23Hãy xem ví dụ sau
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
4Trong đoạn mã trước, mọi thứ trong mệnh đề
x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
23 sẽ được thực thi. Sẽ không có vấn đề gì nếu bạn gặp một ngoại lệ ở đâu đó trong mệnh đề Traceback [most recent call last]:
File "", line 4, in
Exception: x should not exceed 5. The value of x was: 10
7 hoặc x = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
76. Chạy mã trước đó trên máy Windows sẽ xuất ra như saux = 10
if x > 5:
raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
5Loại bỏ các quảng cáoTổng hợp
Sau khi thấy sự khác biệt giữa lỗi cú pháp và ngoại lệ, bạn đã tìm hiểu về nhiều cách khác nhau để tăng, bắt và xử lý ngoại lệ trong Python. Trong bài viết này, bạn đã thấy các tùy chọn sau
8 cho phép bạn đưa ra một ngoại lệ bất cứ lúc nàox = 10 if x > 5: raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
1 cho phép bạn xác minh xem một điều kiện nhất định có được đáp ứng hay không và đưa ra một ngoại lệ nếu khôngTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
- Trong mệnh đề
7, tất cả các câu lệnh được thực hiện cho đến khi gặp ngoại lệTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
8 được sử dụng để nắm bắt và xử lý [các] ngoại lệ gặp phải trong mệnh đề tryTraceback [most recent call last]: File "", line 4, in Exception: x should not exceed 5. The value of x was: 10
76 cho phép bạn mã các phần chỉ chạy khi không gặp ngoại lệ trong mệnh đề tryx = 10 if x > 5: raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
23 cho phép bạn thực thi các phần mã luôn chạy, có hoặc không có bất kỳ ngoại lệ nào đã gặp trước đóx = 10 if x > 5: raise Exception['x should not exceed 5. The value of x was: {}'.format[x]]
Tải xuống PDF miễn phí. Bảng cheat Python 3
Hy vọng rằng bài viết này đã giúp bạn hiểu các công cụ cơ bản mà Python cung cấp khi xử lý các ngoại lệ
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Tăng và xử lý ngoại lệ Python
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Said van de Klundert
Said là một kỹ sư mạng, người đam mê Python và là tác giả khách mời tại Real Python
» Thông tin thêm về SaidMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Adriana
Joanna
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi