Biến lỗi rất phổ biến trong lập trình. Trong Python, chúng tôi sử dụng thuật ngữ “ngoại lệ” cho các lỗi xảy ra trong quá trình thực thi mã. Có thể là lỗi đánh máy, mã hóa mất tệp trung hoặc mã đạt đến trạng thái không hợp lệ, đó là điều không thể tránh khỏi. bạn càng viết nhiều chương trình Python, bạn càng phải đối mặt và xử lý các ngoại lệ Python nhiều hơn
Việc xử lý ngoại lệ trong Python không nghe có vẻ khó khăn hoặc bí truyền, nhưng nó là nền tảng cho lộ trình học Python của bạn. Bằng cách dự đoán chính xác sự cố tiềm ẩn và xử lý các trường hợp ngoại lệ, chúng tôi có thể giải quyết sự cố và ngăn không cho mã bị lỗi – trong khi vẫn giữ cho người dùng hài lòng và được cung cấp đầy đủ . Khả năng xử lý đúng các ngoại lệ Python sẽ giúp mã của bạn trở nên đáng tin cậy và dễ hiểu hơn về lâu dài
Trong bài viết này, chúng ta sẽ khám phá các ngoại lệ Python là gì, cách chúng ta có thể xử lý chúng và cách tận dụng chúng bằng cách tạo ra các ngoại lệ của riêng mình và sử dụng chúng để giữ mã của chúng ta.
Có gì trong Python ngoại lệ?
Trong Python, chúng tôi nói rằng các ngoại lệ được đưa ra khi một thao tác không hợp lệ được thực hiện, giả như cố gắng cộng văn bản và số lại với nhau hoặc chia một số cho 0. Bất kể điều gì xảy ra, Python sẽ hiển thị thông báo ngoại lệ và mã sẽ tiếp tục thực thi tại thời điểm đó
Ví dụ, hãy xem xét tập lệnh code. py, contains an side line
Chúng tôi đã mong đợi mã này được đưa ra một Python ngoại lệ - sau tất cả, chúng tôi không thể chuyển đổi chuỗi 'a'
thành nguyên. Nếu thử thực thi lệnh thi, bạn sẽ thấy một thông báo ngoại lệ tương tự như sau
Traceback [most recent call last]:
File
"code.py"
, line
1
,
in
Traceback [most recent call last]:
0_______11 Traceback [most recent call last]:
2Traceback [most recent call last]:
3Traceback [most recent call last]:
4Traceback [most recent call last]:
5'a'
Thông báo ngoại lệ có thể trông đáng sợ, nhưng nó thực sự rất hữu ích. Nó cho chúng ta biết
- Loại ngoại lệ Python nào đã được nêu ra [trong trường hợp này là
Traceback [most recent call last]:
7] - Dòng nào đã kích hoạt ngoại lệ [dòng 1 của mã lệnh. py]
- In sao ngoại lệ được nêu ra. Thông báo này được truyền tải qua thông báo ngoại lệ Python
Traceback [most recent call last]:
8, nghĩa là'a'
không thể chuyển đổi chuỗi thành số nguyên
Các biến ngoại lệ phổ biến trong Python
Như bạn có thể mong đợi, có rất nhiều loại ngoại lệ Python bên ngoài kia. Hãy xem xét một số ngoại lệ Python mà bạn sẽ gặp phải thường xuyên nhất, cùng với các mẫu mã sẽ nêu ra chúng
Syntax error
Ngoại lệ này xuất hiện khi bạn viết mã Python sai cú pháp. Nguyên nhân phổ biến của công việc này là do quên sử dụng dấu hai chấm trên
0 câu lệnh. or to back the command quote/unmatched command in code. Hãy xem những ví dụ này
Nếu bạn gặp phải lỗi ngoại lệ Python này, giải pháp là tìm lỗi cú pháp trong mã của bạn và chỉnh sửa chúng
TypeLỗi
Ngoại lệ này để biết rằng bạn đã cố gắng thực hiện một thao tác bằng cách sử dụng loại dữ liệu sai. Như ví dụ sau minh họa, bạn không thể "thêm" một số và một chuỗi
Ngoại lệ này thường xuất hiện khi bạn cố gắng thực hiện một thao tác với giá trị Không có – là loại không chấp nhận bất kỳ thao tác nào.
Error value
Ngoại lệ này xuất hiện khi bạn cung cấp đúng loại dữ liệu cho một thao tác nhưng có giá trị không hợp lệ. Ví dụ. chúng ta không thể tính logarit của một số âm
ZeroDivisionLỗi
Như tên gợi ý, ngoại lệ này xảy ra khi bạn cố gắng chia một số cho 0
Bạn có thể coi nó như một phiên bản "chuyên dụng" của một tệp Traceback [most recent call last]:
7
Error Index
Trường hợp ngoại lệ này xảy ra khi bạn cung cấp chỉ mục không hợp lệ cho một chuỗi – ví dụ. if the list only has 5 the death section but you try to get the death section at index
2
Main error
Đây là từ điển đối tác của
3. Ngoại lệ được đưa ra khi bạn cung cấp từ khóa không tồn tại cho từ điển Python
4
5
6
7Traceback [most recent call last]:
5Traceback [most recent call last]:
4,
File
1Traceback [most recent call last]:
5File
3,
File
5Traceback [most recent call last]:
5File
7File
8
Cách xử lý ngoại lệ trong Python
Đến giờ, có lẽ bạn đã hiểu rõ về cách thức hoạt động của các ngoại lệ Python và ý nghĩa của chúng. Nhưng làm thế nào để chúng ta đối phó với họ?
Chắc chắn, một số trường hợp ngoại lệ rất đơn giản. Nếu tôi gặp File
9lỗi , giải pháp đơn giản là chỉnh sửa cú pháp trong mã của riêng tôi. Nhưng nếu tôi không biết những phím nào trong từ điển thì sao?
Nhập "code.py"
0khối. Đây là một khối mã đặc biệt cố gắng chạy một dòng [hoặc một số dòng] mã mà chúng tôi biết có thể gây ra ngoại lệ Python. Nếu sự ngoại lệ thực sự được đưa ra, nó sẽ đi vào khối ngoại lệ , xử lý sự cố và giữ cho mã không bị lỗi xử lý
Đây là một ví dụ về giao diện của nó.
_______41____42____43"code.py"
4
"code.py"
5"code.py"
1____42"code.py"
8"code.py"
9, line
0, line
1
Chạy mã ở trên và thay đổi dòng , line
2 thành giá trị âm thanh. Như chúng ta đã thấy trước đây, logarit của một số âm không tồn tại, dẫn đến Traceback [most recent call last]:
7trong mã của chúng ta. Tuy nhiên, bằng cách đặt dòng , line
4dưới , line
5khối, chúng tôi có thể dự đoán và xử lý vấn đề này
Bất kể khi nào Traceback [most recent call last]:
7kích hoạt, mã chỉ cần bỏ qua thẳng vào , line
7khối. Trong khối đó, chúng tôi thông báo cho người dùng rằng họ nên cung cấp một số khác cho lệnh tập tin. Thay vì gặp sự cố, chương trình của chúng tôi hiện xử lý sự cố một cách duyên dáng và thông báo cho người dùng. Chống khủng hoảng
Xử lý ngoại lệ Python như một chuyên gia
Bây giờ chúng ta đã hiểu cơ bản về việc sử dụng "code.py"
0các khối để xử lý ngoại lệ Python. Nhưng các khối mã này có thể được mở rộng theo một số cách mà chúng ta sẽ khám phá bên dưới
Bạn có thể sử dụng nhiều , line
9khối để xử lý các ngoại lệ khác nhau. Trong mã bên dưới, chúng tôi tính logarit của 1
0chia cho 1
1trong khi xử lý các ngoại lệ tiềm năng 1
2và Traceback [most recent call last]:
7bên trong các , line
9khối tương ứng của chúng. Hãy thử chạy mã sau khi thay đổi giá trị của 1
0 hoặc 1
1và bạn sẽ thấy ngoại lệ tương ứng đang được xử lý
"code.py"
5"code.py"
1____42,
0, line
1
"code.py"
5"code.py"
1____42,
5, line
1
Cũng có thể nhóm hai hoặc nhiều ngoại lệ vào một , line
9khối duy nhất bằng cách sử dụng dấu trích đơn
, line
9 ,
9
"code.py"
5"code.py"
1____42in
3in
4
Vì chúng tôi không biết trước mã dữ liệu sẽ kích hoạt một 1
2hay một Traceback [most recent call last]:
7, chúng tôi nên sử dụng in
7cấu trúc để thông báo có ngoại lệ đang được xử lý. Ví dụ. nếu mã kích hoạt một 1
2, thông báo được đưa vào sẽ trở thành " in
9"
Một tùy chọn khác là sử dụng 0 để xử lý [hầu như] mọi ngoại lệ Python trong một khối
"code.py"
5"code.py"
1____42in
3in
4
Nhưng hãy cẩn thận. mặc dù việc xử lý ngoại lệ “bắt tất cả” này có thể hữu ích trong một số trường hợp nhất định, nhưng nó thực sự có thể khiến mã của bạn khó hiểu và khó giải quyết lỗi hơn. Một 0khối cuối cùng có thể ẩn các ngoại lệ mà bạn thậm chí không xem xét trước
Cuối cùng, có hai khối tùy chọn cho một "code.py"
0khối
- Khối
8này chỉ thực thi nếu không có bất kỳ ngoại lệ nào được đưa ra trong
9khối trước đó
- Khối
Traceback [most recent call last]:
00luôn thực thi - bất kể có ngoại lệ Python nào được đưa ra hay không
Đây là ví dụ của chúng ta trông giống như thế nào với các khối ở trên được thêm vào. [Một lần nữa, thay đổi giá trị của 1
0và 1
1 để xem các thông báo khác nhau có trong. ]
"code.py"
5Traceback [most recent call last]:
04
5 Traceback [most recent call last]:
06
"code.py"
5"code.py"
1____42,
0, line
1
"code.py"
5"code.py"
1____42,
5, line
1
"code.py"
5"code.py"
1____42Traceback [most recent call last]:
20Traceback [most recent call last]:
21
"code.py"
5"code.py"
1____42Traceback [most recent call last]:
25, line
1
Như bạn có thể thấy, Traceback [most recent call last]:
27được tính bên trong 9khối. Trong quá trình này, bất kỳ trường hợp ngoại lệ nào mà chúng tôi dự đoán sẽ bị chặn bởi
, line
9khối tương ứng. Nếu không có bất kỳ ngoại lệ nào được đưa ra, mã sẽ nhập 8khối và hiển thị giá trị
Traceback [most recent call last]:
27đã được tính toán thành công. Sau đó, Traceback [most recent call last]:
00khối kích hoạt và hiển thị kết thúc thông báo – bất kể mã trước đó có đưa ra ngoại lệ hay không
Tạo và nâng cao các ngoại lệ của riêng bạn trong Python
Nếu bạn cần linh hoạt hơn trong công việc xử lý lỗi của mình, Python cho phép bạn xác định các loại tùy chỉnh ngoại lệ. Bạn chỉ cần tạo một lớp với tên của tùy chỉnh ngoại lệ của mình
Traceback [most recent call last]:
33 Traceback [most recent call last]:
34
Đừng lo lắng nếu bạn không biết lớp là gì – bạn sẽ không thực sự cần biết về chúng để tạo và sử dụng các tùy chọn ngoại lệ
Sau đó, bạn có thể tăng chúng bằng cách sử dụng Traceback [most recent call last]:
35từ khóa và chúng sẽ hoạt động giống như bất kỳ ngoại lệ Python nào khác. Ví dụ. Bên dưới mã bên dưới được đưa ra một ngoại lệ hiển thị thông tin bất kỳ khi bất kỳ giá trị nào của 1
0vượt quá giới hạn nhất định
"code.py"
5Traceback [most recent call last]:
38
5 Traceback [most recent call last]:
40Traceback [most recent call last]:
41
"code.py"
5Traceback [most recent call last]:
35Traceback [most recent call last]:
44
Nếu chúng tôi thay đổi giá trị x thành 200, chúng tôi sẽ nhận được thông báo lỗi này
Traceback [most recent call last]:
45Traceback [most recent call last]:
46 Traceback [most recent call last]:
47 Traceback [most recent call last]:
48Traceback [most recent call last]:
49
Bây giờ, bạn có thể thắc mắc Tại sao tôi lại muốn chương trình của mình bị lòi?. Câu trả lời thực sự phụ thuộc vào những gì bạn đang cố gắng đạt được với mã của mình
Nếu bạn đang viết mã mà người khác có thể sử dụng, sẽ rất hữu ích nếu bạn đưa ra các ngoại lệ để biết rõ lý do tại sao một thao tác hợp lệ nhất không hợp lệ. Sau đó, bất kỳ ai đang sử dụng mã đó đều có thể quyết định xem họ có cần thay đổi điều gì đó trong mã của mình hay họ muốn sử dụng một "code.py"
0khối để phá vỡ các tùy chọn chỉnh sửa ngoại lệ của bạn. Trong mọi trường hợp, việc giữ mã của bạn rõ ràng và có tổ chức luôn được giải đáp