Chúng ta có thể có nhiều ngoại trừ trong python không?

Các ngoại lệ được đưa ra khi chương trình gặp lỗi trong quá trình thực thi. Chúng làm gián đoạn dòng chảy bình thường của chương trình và thường kết thúc nó đột ngột. Để tránh điều này, bạn có thể bắt chúng và xử lý chúng một cách thích hợp

Bạn có thể đã nhìn thấy chúng trong các dự án lập trình của mình

Nếu bạn đã từng thử chia cho 0 trong Python, bạn hẳn đã thấy thông báo lỗi này

>>> a = 5/0
Traceback [most recent call last]:
  File "", line 1, in 
    a = 5/0
ZeroDivisionError: division by zero

Nếu bạn cố lập chỉ mục một chuỗi có chỉ mục không hợp lệ, bạn chắc chắn nhận được thông báo lỗi này

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range

Đây là những ví dụ về ngoại lệ

🔹 Ngoại lệ phổ biến

Có nhiều loại ngoại lệ khác nhau và tất cả chúng đều được nêu ra trong các tình huống cụ thể. Một số trường hợp ngoại lệ mà bạn rất có thể sẽ thấy khi làm việc với các dự án của mình là

  • IndexError - tăng lên khi bạn cố gắng lập chỉ mục một danh sách, bộ dữ liệu hoặc chuỗi vượt quá ranh giới được phép. Ví dụ
>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
  • KeyError - xuất hiện khi bạn cố gắng truy cập giá trị của khóa không tồn tại trong từ điển. Ví dụ
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
  • NameError - xuất hiện khi tên mà bạn đang tham chiếu trong mã không tồn tại. Ví dụ
>>> a = b
Traceback [most recent call last]:
  File "", line 1, in 
    a = b
NameError: name 'b' is not defined
  • TypeError - tăng lên 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. Ví dụ
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
  • ZeroDivisionError - tăng lên khi bạn cố gắng chia cho số không
>>> a = 5/0
Traceback [most recent call last]:
  File "", line 1, in 
    a = 5/0
ZeroDivisionError: division by zero

💡 mẹo. Để tìm hiểu thêm về các loại ngoại lệ tích hợp khác, vui lòng tham khảo bài viết này trong Tài liệu Python

🔸 Cấu tạo của một ngoại lệ

Tôi chắc rằng bạn đã nhận thấy một khuôn mẫu chung trong các thông báo lỗi này. Hãy chia nhỏ cấu trúc chung của chúng từng mảnh

Đầu tiên, chúng tôi tìm thấy dòng này [xem bên dưới]. Truy nguyên về cơ bản là một danh sách nêu chi tiết các lệnh gọi hàm đã được thực hiện trước khi ngoại lệ được đưa ra

Traceback giúp bạn trong quá trình gỡ lỗi vì bạn có thể phân tích chuỗi lệnh gọi hàm dẫn đến ngoại lệ

Traceback [most recent call last]:

Then, we see this line [see below] with the path to the file and the line that raised the exception. In this case, the path was the Python shell since the example was executed directly in IDLE.

________số 8

💡 Tip: If the line that raised the exception belongs to a function,  is replaced by the name of the function.

Cuối cùng, chúng tôi thấy một thông báo mô tả nêu chi tiết loại ngoại lệ và cung cấp thông tin bổ sung để giúp chúng tôi gỡ lỗi mã

NameError: name 'a' is not defined

2️⃣ Xử lý ngoại lệ. Mục đích và bối cảnh

Bạn có thể yêu cầu. tại sao tôi muốn xử lý các trường hợp ngoại lệ?

🔹 Ví dụ. Đầu vào của người dùng

Hãy tưởng tượng điều gì sẽ xảy ra nếu người dùng đang làm việc với chương trình của bạn nhập một thông tin đầu vào không hợp lệ. Điều này sẽ đưa ra một ngoại lệ vì một hoạt động không hợp lệ đã được thực hiện trong quá trình

Nếu chương trình của bạn không xử lý điều này một cách chính xác, nó sẽ bị lỗi đột ngột và người dùng sẽ có trải nghiệm rất thất vọng với sản phẩm của bạn

Nhưng nếu bạn xử lý ngoại lệ, bạn sẽ có thể cung cấp giải pháp thay thế để cải thiện trải nghiệm của người dùng

Có lẽ bạn có thể hiển thị một thông báo mô tả yêu cầu người dùng nhập thông tin đầu vào hợp lệ hoặc bạn có thể cung cấp giá trị mặc định cho thông tin đầu vào. Tùy thuộc vào ngữ cảnh, bạn có thể chọn phải làm gì khi điều này xảy ra và đây là điều kỳ diệu của việc xử lý lỗi. Nó có thể tiết kiệm trong ngày khi những điều bất ngờ xảy ra. ⭐️

🔸 Điều gì xảy ra ở hậu trường?

Về cơ bản, khi chúng tôi xử lý một ngoại lệ, chúng tôi đang nói cho chương trình biết phải làm gì nếu ngoại lệ đó được đưa ra. Trong trường hợp đó, luồng thực thi "thay thế" sẽ đến giải cứu. Nếu không có ngoại lệ nào được đưa ra, mã sẽ chạy như mong đợi

3️⃣ Thời gian viết mã. Sự cố gắng. ngoại trừ Tuyên bố

Bây giờ bạn đã biết ngoại lệ là gì và tại sao chúng ta nên xử lý chúng, chúng ta sẽ bắt đầu đi sâu vào các công cụ tích hợp sẵn mà ngôn ngữ Python cung cấp cho mục đích này

Đầu tiên, chúng ta có tuyên bố cơ bản nhất. thử. ngoại trừ

Hãy minh họa điều này bằng một ví dụ đơn giản. Chúng tôi có một chương trình nhỏ yêu cầu người dùng nhập tên của một học sinh để hiển thị tuổi của học sinh đó

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
0

Lưu ý cách chúng tôi không xác thực đầu vào của người dùng vào lúc này, vì vậy người dùng có thể nhập các giá trị không hợp lệ [tên không có trong từ điển] và hậu quả sẽ rất thảm khốc vì chương trình sẽ bị lỗi nếu KeyError được đưa ra

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
1

🔹 Cú pháp

Chúng tôi có thể xử lý việc này một cách độc đáo bằng cách sử dụng thử. ngoại trừ. Đây là cú pháp cơ bản

Trong ví dụ của chúng tôi, chúng tôi sẽ thêm thử. câu lệnh ngoại trừ trong hàm. Hãy chia nhỏ điều này từng mảnh

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
2

Nếu chúng ta "phóng to", chúng ta sẽ thấy thử. tuyên bố ngoại trừ

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
3
  • Khi hàm được gọi, mệnh đề try sẽ chạy. Nếu không có ngoại lệ nào được đưa ra, chương trình sẽ chạy như mong đợi
  • Nhưng nếu một ngoại lệ được nêu ra trong mệnh đề try, luồng thực thi sẽ ngay lập tức chuyển sang mệnh đề except để xử lý ngoại lệ đó

💡 Lưu ý. Mã này được chứa trong vòng lặp while để tiếp tục yêu cầu người dùng nhập nếu giá trị không hợp lệ. Đây là một ví dụ

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
4

Điều này là tuyệt vời, phải không?

Hiện tại, chúng tôi đang xử lý tất cả các trường hợp ngoại lệ có thể xảy ra với cùng một điều khoản ngoại trừ. Nhưng nếu chúng ta chỉ muốn xử lý một loại ngoại lệ cụ thể thì sao?

🔸 Nắm bắt các ngoại lệ cụ thể

Vì không phải tất cả các loại ngoại lệ đều được xử lý theo cùng một cách, nên chúng tôi có thể chỉ định loại ngoại lệ nào chúng tôi muốn xử lý bằng cú pháp này

Đây là một ví dụ. Chúng tôi đang xử lý ngoại lệ ZeroDivisionError trong trường hợp người dùng nhập số 0 làm mẫu số

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
5

Đây sẽ là kết quả

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
6

Chúng tôi đang xử lý việc này một cách chính xác. Nhưng mà. nếu một loại ngoại lệ khác được đưa ra, chương trình sẽ không xử lý nó một cách duyên dáng

Ở đây chúng ta có một ví dụ về ValueError vì một trong các giá trị là float, không phải int

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
7

Chúng tôi có thể tùy chỉnh cách chúng tôi xử lý các loại ngoại lệ khác nhau

🔹 Nhiều mệnh đề ngoại trừ

Để làm điều này, chúng ta cần thêm nhiều mệnh đề

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
5 để xử lý các loại ngoại lệ khác nhau theo cách khác nhau

Theo Tài liệu Python

Một câu lệnh thử có thể có nhiều hơn một mệnh đề ngoại trừ, để chỉ định các trình xử lý cho các ngoại lệ khác nhau. Nhiều nhất một trình xử lý sẽ được thực thi

Trong ví dụ này, chúng tôi có hai mệnh đề ngoại trừ. Một trong số chúng xử lý ZeroDivisionError và cái còn lại xử lý ValueError, hai loại ngoại lệ có thể được đưa ra trong khối thử này

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
8

💡 Mẹo. Bạn phải xác định loại ngoại lệ nào có thể được đưa ra trong khối thử để xử lý chúng một cách thích hợp

🔸 Nhiều ngoại lệ, một điều khoản ngoại trừ

Bạn cũng có thể chọn xử lý các loại ngoại lệ khác nhau với cùng một mệnh đề ngoại trừ

Theo Tài liệu Python

Một mệnh đề ngoại trừ có thể đặt tên cho nhiều ngoại lệ dưới dạng một bộ trong ngoặc đơn

Đây là một ví dụ mà chúng tôi bắt gặp hai trường hợp ngoại lệ [ZeroDivisionError và ValueError] với cùng một mệnh đề

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
5

>>> a = "Hello, World"
>>> a[456]
Traceback [most recent call last]:
  File "", line 1, in 
    a[456]
IndexError: string index out of range
9

Đầu ra sẽ giống nhau đối với hai loại ngoại lệ vì chúng được xử lý bởi cùng một mệnh đề ngoại trừ

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
0
>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
1

🔹 Xử lý các ngoại lệ do hàm được gọi trong mệnh đề try

Một khía cạnh thú vị của việc xử lý ngoại lệ là nếu một ngoại lệ được nêu ra trong một hàm mà trước đó đã được gọi trong mệnh đề try của một hàm khác và bản thân hàm đó không xử lý nó, thì người gọi sẽ xử lý nó nếu có một mệnh đề except phù hợp

Theo Tài liệu Python

Trình xử lý ngoại lệ không chỉ xử lý ngoại lệ nếu chúng xuất hiện ngay trong mệnh đề try, mà còn nếu chúng xảy ra bên trong các hàm được gọi [thậm chí gián tiếp] trong mệnh đề try

Hãy xem một ví dụ để minh họa điều này

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
2

Chúng ta có hàm

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
7 và hàm
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
8.
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
7 gọi
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
8 trong mệnh đề try. Với đối số 50,
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
8 sẽ gây ra lỗi IndexError vì chỉ số 50 không hợp lệ đối với chuỗi a

Nhưng bản thân

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
8 không xử lý ngoại lệ. Lưu ý làm thế nào không có thử. câu lệnh ngoại trừ trong hàm
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
8. Vì nó không xử lý ngoại lệ nên nó "gửi" ngoại lệ đó tới
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
7 để xem liệu nó có thể xử lý ngoại lệ hay không, như bạn có thể thấy trong sơ đồ bên dưới

Vì f biết cách xử lý IndexError nên tình huống được xử lý một cách khéo léo và đây là kết quả

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
3

💡 Lưu ý. Nếu

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
7 không xử lý ngoại lệ, chương trình sẽ kết thúc đột ngột với thông báo lỗi mặc định cho IndexError

🔸 Truy cập chi tiết cụ thể về ngoại lệ

Ngoại lệ là các đối tượng trong Python, vì vậy bạn có thể gán ngoại lệ đã được nâng lên thành một biến. Bằng cách này, bạn có thể in mô tả mặc định của ngoại lệ và truy cập các đối số của nó

Theo Tài liệu Python

Mệnh đề ngoại trừ có thể chỉ định một biến sau tên ngoại lệ. Biến được liên kết với một thể hiện ngoại lệ với các đối số được lưu trữ trong thể hiện. tranh luận

Ở đây chúng tôi có một ví dụ [xem bên dưới] khi chúng tôi gán thể hiện của

>>> a = b
Traceback [most recent call last]:
  File "", line 1, in 
    a = b
NameError: name 'b' is not defined
6 cho biến
>>> a = b
Traceback [most recent call last]:
  File "", line 1, in 
    a = b
NameError: name 'b' is not defined
7. Sau đó, chúng ta có thể sử dụng biến này trong mệnh đề ngoại trừ để truy cập loại ngoại lệ, thông báo và đối số của nó

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
4

Đầu ra tương ứng sẽ là

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
5

💡 Mẹo. Nếu bạn đã quen thuộc với các phương thức đặc biệt, theo Tài liệu Python. "để thuận tiện, trường hợp ngoại lệ xác định

>>> a = b
Traceback [most recent call last]:
  File "", line 1, in 
    a = b
NameError: name 'b' is not defined
8 để các đối số có thể được in trực tiếp mà không cần phải tham chiếu đến
>>> a = b
Traceback [most recent call last]:
  File "", line 1, in 
    a = b
NameError: name 'b' is not defined
9. "

4️⃣ Bây giờ hãy thêm. Mệnh đề "khác"

Mệnh đề

>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
0 là tùy chọn, nhưng nó là một công cụ tuyệt vời vì nó cho phép chúng ta thực thi mã chỉ nên chạy nếu không có ngoại lệ nào được đưa ra trong mệnh đề try

Theo Tài liệu Python

Câu lệnh
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
1 …
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
5 có một mệnh đề tùy chọn khác, khi xuất hiện, phải tuân theo tất cả các mệnh đề ngoại trừ. Nó hữu ích cho mã phải được thực thi nếu mệnh đề thử không đưa ra ngoại lệ

Dưới đây là một ví dụ về việc sử dụng mệnh đề

>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
0

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
6

Nếu không có ngoại lệ nào được đưa ra, kết quả sẽ được in

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
7

Nhưng nếu một ngoại lệ được đưa ra, kết quả sẽ không được in

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
8

💡 Mẹo. Theo Tài liệu Python

Việc sử dụng mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
0 tốt hơn là thêm mã bổ sung vào mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
1 vì nó tránh vô tình bắt gặp một ngoại lệ không được đưa ra bởi mã được bảo vệ bởi câu lệnh
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
1 …
>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
5

5️⃣ Mệnh đề "cuối cùng"

Mệnh đề cuối cùng là mệnh đề cuối cùng trong chuỗi này. Nó là tùy chọn, nhưng nếu bạn bao gồm nó, thì nó phải là mệnh đề cuối cùng trong chuỗi. Mệnh đề

>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8 luôn được thực thi, ngay cả khi một ngoại lệ được đưa ra trong mệnh đề try.  

Theo Tài liệu Python

Nếu có mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8, mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8 sẽ thực thi như tác vụ cuối cùng trước khi câu lệnh
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
1 hoàn thành. Mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8 chạy cho dù câu lệnh
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
1 có tạo ra ngoại lệ hay không

Mệnh đề cuối cùng thường được sử dụng để thực hiện các hành động "dọn dẹp" luôn được hoàn thành. Ví dụ: nếu chúng tôi đang làm việc với một tệp trong mệnh đề try, chúng tôi sẽ luôn cần đóng tệp, ngay cả khi một ngoại lệ được đưa ra khi chúng tôi đang làm việc với dữ liệu

Đây là một ví dụ về mệnh đề cuối cùng

>>> num = [1, 2, 6, 5]
>>> num[56546546]
Traceback [most recent call last]:
  File "", line 1, in 
    num[56546546]
IndexError: list index out of range
9

Đây là kết quả khi không có ngoại lệ nào được đưa ra

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
0

Đây là đầu ra khi một ngoại lệ được đưa ra

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
1

Lưu ý cách mệnh đề

>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8 luôn chạy

❗️Quan trọng. hãy nhớ rằng mệnh đề

>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
0 và mệnh đề
>>> [5, 6, 7] * [1, 2, 3]
Traceback [most recent call last]:
  File "", line 1, in 
    [5, 6, 7] * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'tuple'
8 là tùy chọn, nhưng nếu bạn quyết định bao gồm cả hai, thì mệnh đề cuối cùng phải là mệnh đề cuối cùng trong chuỗi

6️⃣ Tăng ngoại lệ

Bây giờ bạn đã biết cách xử lý ngoại lệ trong Python, tôi muốn chia sẻ với bạn thủ thuật hữu ích này. bạn cũng có thể chọn thời điểm đưa ra các ngoại lệ trong mã của mình

Điều này có thể hữu ích cho các tình huống nhất định. Hãy xem làm thế nào bạn có thể làm điều này

Dòng này sẽ tăng ValueError với thông báo tùy chỉnh

Ở đây chúng ta có một ví dụ [xem bên dưới] về hàm in giá trị của các mục trong danh sách hoặc bộ hoặc các ký tự trong chuỗi. Nhưng bạn đã quyết định rằng bạn muốn danh sách, bộ hoặc chuỗi có độ dài 5. Bạn bắt đầu hàm với câu lệnh if để kiểm tra xem độ dài của đối số

>>> a = 5/0
Traceback [most recent call last]:
  File "", line 1, in 
    a = 5/0
ZeroDivisionError: division by zero
7 có phải là 5 không. Nếu không, một ngoại lệ ValueError được đưa ra

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
2

Đầu ra sẽ là

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
3

Lưu ý cách dòng cuối cùng hiển thị thông báo mô tả

>>> students = {"Nora": 15, "Gino": 30}
>>> students["Lisa"]
Traceback [most recent call last]:
  File "", line 1, in 
    students["Lisa"]
KeyError: 'Lisa'
4

Sau đó, bạn có thể chọn cách xử lý ngoại lệ bằng cách thử. tuyên bố ngoại trừ. Bạn có thể thêm một mệnh đề khác và/hoặc một mệnh đề cuối cùng. Bạn có thể tùy chỉnh nó để phù hợp với nhu cầu của bạn

🔹 Tài nguyên hữu ích

  • ngoại lệ
  • Xử lý ngoại lệ
  • Xác định hành động dọn dẹp

Tôi hy vọng bạn thích đọc bài viết của tôi và thấy nó hữu ích. Bây giờ bạn đã có các công cụ cần thiết để xử lý các ngoại lệ trong Python và bạn có thể sử dụng chúng để tạo lợi thế cho mình khi viết mã Python. ? . Bạn có thể theo dõi tôi trên Twitter

⭐️ Bạn có thể thưởng thức các bài báo /tin tức về FreeCodeCamp khác của tôi

  • Trình trang trí @property trong Python. Các trường hợp sử dụng, ưu điểm và cú pháp của nó
  • Cấu trúc dữ liệu 101. Đồ thị — Giới thiệu trực quan cho người mới bắt đầu
  • Cấu trúc dữ liệu 101. Mảng — Giới thiệu trực quan cho người mới bắt đầu

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Estefania Cassingena Navone

Nhà phát triển, nhà văn kỹ thuật và người tạo nội dung @freeCodeCamp. Tôi chạy freeCodeCamp. org Kênh YouTube Español

Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Chúng ta có thể có nhiều khối except trong Python không?

Python Nhiều ngoại lệ . Hãy cho chúng tôi xem các ví dụ xử lý nhiều ngoại lệ của Python. Khi trình thông dịch gặp một ngoại lệ, nó sẽ kiểm tra các khối ngoại trừ được liên kết với khối thử đó. Các khối ngoại trừ này có thể khai báo loại ngoại lệ mà chúng xử lý. It is possible to have multiple except blocks for one try block. Let us see Python multiple exception handling examples. When the interpreter encounters an exception, it checks the except blocks associated with that try block. These except blocks may declare what kind of exceptions they handle.

Bạn có thể có nhiều ngoại lệ cho một lần thử trong Python không?

Theo Tài liệu Python. Một câu lệnh try có thể có nhiều hơn một mệnh đề except để chỉ định các trình xử lý cho các ngoại lệ khác nhau . Nhiều nhất một trình xử lý sẽ được thực thi. Trong ví dụ này, chúng tôi có hai mệnh đề ngoại trừ.

Một lần thử có thể có bao nhiêu khối ngoại trừ?

Mệnh đề try có thể có bất kỳ số lượng mệnh đề ngoại trừ nào để xử lý các ngoại lệ khác nhau, tuy nhiên, chỉ một mệnh đề sẽ được thực thi trong trường hợp ngoại lệ xảy ra. Chúng ta có thể sử dụng một bộ giá trị để chỉ định nhiều ngoại lệ trong một mệnh đề ngoại trừ.

Bạn có thể có hai lần thử Python không?

Tất cả các mã phải được chạy, trong một khối thử, ngay cả khi chúng gây ra ngoại lệ. Bạn không thể có thứ đó . Không có khối thử để loại bỏ các ngoại lệ trên tất cả các mã được thực thi. Nó sẽ cho phép bạn bắt ngoại lệ khi nó xảy ra, nhưng phần còn lại của khối không bao giờ được thực thi.

Chủ Đề