Ngoại trừ ngoại lệ như e có nghĩa là gì trong Python?

Xử lý ngoại lệ Python là quá trình xác định và phản hồi lỗi trong chương trình. Nói cách khác, đó là một cách để xử lý các lỗi có thể xảy ra trong chương trình của bạn. Trong bài viết này, bạn sẽ học cách xử lý lỗi trong Python bằng cách sử dụng từ khóa Python

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
6 và
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7. Nó cũng sẽ hướng dẫn bạn cách tạo các ngoại lệ tùy chỉnh, có thể được sử dụng để xác định các thông báo lỗi cụ thể của riêng bạn

Mục lục

Ngoại lệ là gì?

Một ngoại lệ là một điều kiện phát sinh trong quá trình thực hiện một chương trình. Đó là một tín hiệu cho thấy một điều gì đó bất ngờ đã xảy ra. Python đại diện cho các ngoại lệ bởi một đối tượng thuộc một loại nhất định

Trong Python, tất cả các ngoại lệ tích hợp, không thoát khỏi hệ thống đều bắt nguồn từ lớp

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8. Các ngoại lệ có tên mô tả riêng. Ví dụ: nếu bạn cố gắng chia một số cho 0, bạn sẽ nhận được một ngoại lệ
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
9, đây cũng là một lớp con của lớp
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8

Để biết hệ thống phân cấp hoàn chỉnh của tất cả các trường hợp ngoại lệ, bạn có thể xem nếu bạn quan tâm. Đây là một đoạn trích nhỏ từ hệ thống phân cấp này, chỉ để minh họa

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- Exception
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      .....

Trong trường hợp kiến ​​thức của bạn về các đối tượng, lớp và tính kế thừa hơi cũ, bạn có thể muốn đọc bài viết của tôi về các đối tượng và lớp và bài viết của tôi về tính kế thừa trước

Python thử ngoại trừ

Khi có điều gì đó không mong muốn xảy ra, chúng ta có thể đưa ra một ngoại lệ tại điểm xảy ra lỗi. Khi một ngoại lệ được đưa ra, Python sẽ dừng luồng thực thi hiện tại và bắt đầu tìm kiếm một trình xử lý ngoại lệ có thể xử lý nó. Vậy trình xử lý ngoại lệ là gì?

Ngoại trừ ngoại lệ như e có nghĩa là gì trong Python?
Ngoại trừ ngoại lệ như e có nghĩa là gì trong Python?
cố gắng. ngoại trừ. khác. cuối cùng

Như minh họa trong hình minh họa, chúng ta có thể tạo một khối mã bằng cách bắt đầu bằng câu lệnh thử. Điều này về cơ bản có nghĩa là. cố gắng chạy mã này, nhưng một ngoại lệ có thể xảy ra

Sau khối thử của chúng tôi, một hoặc nhiều khối ngoại trừ phải tuân theo. Đây là nơi phép màu xảy ra. Các khối ngoại trừ này có thể bắt một ngoại lệ, vì chúng ta thường gọi đây là. Trên thực tế, nhiều ngôn ngữ lập trình khác sử dụng câu lệnh có tên là

try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
1 thay vì
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7. Mỗi khối
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7 có thể xử lý một loại ngoại lệ cụ thể

Nhớ. các lớp được phân cấp. Vì lý do đó, ngoại lệ là quá. Do đó, các khối ngoại trừ phải đi từ cụ thể nhất, như

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
9, đến ít cụ thể hơn, như
try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
5

Để chứng minh điều này, hãy tưởng tượng điều gì sẽ xảy ra khi chúng ta bắt đầu với một khối except bắt được

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8. Khối đầu tiên này về cơ bản sẽ bắt được mọi thứ, bởi vì hầu hết các ngoại lệ đều kế thừa từ khối này, khiến các khối ngoại trừ khác trở nên vô dụng

Bây giờ, trước tiên chúng ta hãy quay lại việc đưa ra một ngoại lệ. Khi một ngoại lệ được đưa ra, trình xử lý ngoại lệ có thể xử lý ngoại lệ đó có thể ở gần đó, nhưng nó cũng có thể ở một mô-đun khác. Điều quan trọng cần nhận ra là Python sẽ không quét mã của bạn một cách ngẫu nhiên để tìm một trình xử lý ngoại lệ. Thay vào đó, trình xử lý phải ở đâu đó trong ngăn xếp cuộc gọi

Bây giờ hãy quên

try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
7 và
try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
8 đi. Tôi sẽ giải thích chi tiết hơn trong bài viết này. Trước tiên chúng ta cần thảo luận về ngăn xếp cuộc gọi, để thực sự hiểu cách một ngoại lệ tìm đường đến một trình xử lý ngoại lệ

ngăn xếp cuộc gọi

Ngăn xếp cuộc gọi là một danh sách có thứ tự các chức năng hiện đang được thực thi. Ví dụ: bạn có thể gọi hàm A, hàm này gọi hàm B, hàm này gọi hàm C. Bây giờ chúng ta có một ngăn xếp cuộc gọi bao gồm A, B và C. Khi C đưa ra một ngoại lệ, Python sẽ tìm kiếm một trình xử lý ngoại lệ trong ngăn xếp cuộc gọi này, đi ngược lại từ đầu đến cuối. Nó có thể ở hàm C (gần với ngoại lệ nhất), ở hàm B (xa hơn một chút), ở hàm A hoặc thậm chí ở cấp cao nhất của chương trình mà chúng ta gọi là hàm A

Nếu Python tìm thấy một khối ngoại trừ phù hợp, nó sẽ thực thi mã trong khối đó. Nếu không tìm thấy, Python sẽ tự xử lý ngoại lệ. Điều này có nghĩa là nó sẽ in ngoại lệ và thoát khỏi chương trình vì nó không biết phải làm gì với nó

Tôi hy vọng bạn vẫn còn với tôi. Nếu không, không phải lo lắng. Các ví dụ trên trang này hy vọng sẽ làm cho tất cả điều này rõ ràng hơn. Bạn có thể muốn xem lại phần này sau khi hoàn thành toàn bộ bài viết

Bắt ngoại lệ với thử ngoại trừ

Cuối cùng hãy viết một số mã thực tế. Để xử lý một ngoại lệ, chúng ta cần bắt nó. Như chúng ta vừa học, chúng ta có thể bắt một ngoại lệ bằng cách sử dụng các từ khóa

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
6 và
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7. Khi một ngoại lệ xảy ra trong khi chúng tôi đang ở trong khối
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
6, mã trong khối
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7 được thực thi

Một ví dụ đơn giản

Hãy thử một ví dụ đơn giản trước. Như bạn hy vọng đã biết, chúng ta không thể chia cho số 0. Nếu chúng ta vẫn làm như vậy, Python sẽ ném ra một ngoại lệ có tên là

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
9, là một lớp con của
try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
5

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

Nếu bạn gọi một hàm Python bên trong khối thử và một ngoại lệ xảy ra trong hàm đó, luồng thực thi mã sẽ dừng tại điểm ngoại lệ và mã trong khối ngoại trừ được thực thi. Hãy thử làm điều này một lần nữa, mà không cần thử và ngoại trừ. Bạn sẽ thấy Python in ra ngoại lệ cho chúng ta. Bạn có thể làm như vậy trong đoạn mã sau

Ngoài ra, lưu ý rằng Python sẽ in lỗi ra thiết bị lỗi chuẩn nếu bạn không tự mình xử lý ngoại lệ. Trong phần cố định ở trên, điều này có thể nhìn thấy vì đầu ra xuất hiện trong tab 'Lỗi' thay vì tab 'Đầu ra'

Bắt lỗi IO

Hãy thử một ví dụ khác, phổ biến hơn. Rốt cuộc, ai chia một số cho 0, phải không?

Ngoại lệ có khả năng xảy ra khi tương tác với thế giới bên ngoài, e. g. khi làm việc với tệp hoặc mạng. Ví dụ: nếu bạn cố mở một tệp bằng Python nhưng tệp đó không tồn tại, bạn sẽ nhận được một ngoại lệ

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
15. Nếu bạn không có quyền truy cập vào tệp do quyền, bạn sẽ lại nhận được ngoại lệ
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
15. Hãy xem cách xử lý những ngoại lệ này

Phân công

Vui lòng làm như sau

  1. Chạy đoạn mã dưới đây, chú ý tên tệp (nó không tồn tại). Xem những gì xảy ra
  2. Thay đổi tên tệp thành myfile. txt và chạy lại mã. Điều gì xảy ra bây giờ?

Bài tập ngoại trừ thử Python

Ngoài ra, đây là mã để sao chép/dán

try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)

câu trả lời

Không tìm thấy tệp trong trường hợp đầu tiên. Bạn sẽ nhận được kết quả này

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
1

Trong trường hợp thứ hai, bạn vẫn sẽ gặp lỗi sau khi tạo tệp. Lần này vì chúng tôi đang cố ghi vào một tệp được mở ở chế độ chỉ đọc. Để biết thêm thông tin về các chế độ này, hãy đọc bài viết về cách mở, đọc và ghi tệp bằng Python. Lỗi sẽ giống như thế này

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
5

Mặc dù đây là một lỗi, nhưng nó không được ghi vào đầu ra thiết bị lỗi chuẩn của hệ điều hành. Đó là bởi vì chúng tôi đã tự xử lý ngoại lệ. Nếu bạn loại bỏ thử. ngoại trừ mã hoàn toàn và sau đó thử ghi vào tệp ở chế độ chỉ đọc, Python sẽ bắt lỗi, buộc chương trình phải kết thúc và hiển thị thông báo này

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
6

Các khối finally và other

Còn nhớ hai khối kia mà tạm thời kêu em quên không?

Khối cuối cùng trong try-ngoại trừ

Khối

try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
8 được thực thi bất kể có ngoại lệ xảy ra hay không. Ví dụ, các khối
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
19 rất hữu ích khi bạn muốn đóng tệp hoặc kết nối mạng bất kể điều gì xảy ra. Rốt cuộc, bạn muốn dọn sạch tài nguyên để tránh rò rỉ bộ nhớ

Đây là một ví dụ về điều này tại nơi làm việc, trong đó chúng tôi mở một tệp mà không sử dụng với _____250, buộc chúng tôi phải tự đóng tệp đó

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
1

Bạn cũng có thể thử ví dụ tương tác này

Bạn sẽ thấy thông báo 'Đóng tệp ngay bây giờ' được in trên màn hình của bạn. Bây giờ hãy thay đổi chế độ viết thành 'r' thay vì 'w'. Bạn sẽ gặp lỗi vì tệp không tồn tại. Bất chấp ngoại lệ này, chúng tôi vẫn cố gắng đóng tệp nhờ khối cuối cùng. Điều này lần lượt đi sai quá. một 

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
51 ngoại lệ bị ném vì tệp chưa bao giờ được mở và do đó 
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
52 không tồn tại. Bạn có thể sửa lỗi này bằng một 
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
53 lồng nhau. Hãy thử nó cho chính mình

Khối khác trong try-ngoại trừ

Ngoài các khối

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7 và
try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
8, bạn có thể thêm một khối khác. Khối khác chỉ thực thi khi không có ngoại lệ xảy ra. Vì vậy, nó khác với khối cuối cùng, vì cuối cùng vẫn thực thi ngay cả khi có ngoại lệ xảy ra

Khi nào bạn nên sử dụng khối

try:
    # Open file in read-only mode
    with open("not_here.txt", 'r') as f:
        f.write("Hello World!")
except IOError as e:
    print("An error occurred:", e)
7?

Theo hướng dẫn sử dụng Python, việc sử dụng mệnh đề khác tốt hơn là thêm mã bổ sung vào mệnh đề thử. Nhưng tại sao? . Tôi thừa nhận bản thân tôi không thường xuyên sử dụng các khối khác. Ngoài ra, tôi thấy chúng hơi khó hiểu, đặc biệt đối với những người đến từ các ngôn ngữ khác

Các ngoại lệ phổ biến của Python

Một số trường hợp ngoại lệ phổ biến đến mức bạn chắc chắn sẽ gặp phải chúng. Dưới đây là một vài trong số những cái phổ biến nhất

Tên ngoại lệKhi bạn gặp phảiVí dụtình huống làm phát sinh ngoại lệSyntaxErrorRaised khi có lỗi trong cú pháp Python. Nếu không bị bắt, ngoại lệ này sẽ khiến trình thông dịch Python thoát.
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
58KeyErrorRaised khi không tìm thấy khóa trong từ điển.
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
59IndexErrorRaised khi chỉ mục nằm ngoài phạm vi.
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
60KeyboardInterruptTăng lên khi người dùng nhấn phím ngắt (Ctrl+C)Nhấn control+cMột số trường hợp ngoại lệ phổ biến mà bạn sẽ gặp phải tại một số thời điểm trong sự nghiệp của mình

Nếu muốn, bạn có thể cố tình gợi lên những ngoại lệ này. Tôi hứa với bạn, bạn sẽ gặp phải vô số lần trong sự nghiệp lập trình Python của mình. Biết và hiểu ý nghĩa của chúng và thời điểm chúng xảy ra sẽ giúp bạn gỡ lỗi mã của mình rất nhiều

Thực tiễn tốt nhất về ngoại lệ

Bây giờ chúng ta đã biết cơ chế xử lý ngoại lệ, có một số phương pháp hay nhất mà tôi muốn chia sẻ với bạn

Không sử dụng trống ngoại trừ các khối

Tôi đã viết về điều này trước đây trong bài đăng trên blog 'Cách không xử lý ngoại lệ trong Python'. Không sử dụng khối trống khi bạn muốn nắm bắt nhiều loại ngoại lệ. Bằng cách này, tôi có nghĩa là một cái gì đó như

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
2

Bạn có thể gặp điều này trong các mẫu mã trên web. Nếu bạn làm như vậy, hãy tạo thói quen cải thiện việc xử lý ngoại lệ. Tại sao bạn nên làm như vậy và làm thế nào bạn có thể cải thiện mã như ví dụ trên?

Tất cả các ngoại lệ, kể cả ngoại lệ hệ thống, kế thừa từ một lớp có tên là 

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
61. Nếu một mệnh đề 
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7 đề cập đến một lớp cụ thể, thì mệnh đề đó cũng xử lý mọi lớp ngoại lệ bắt nguồn từ lớp đó. Một 
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
7 trống tương đương với 
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
64, do đó nó sẽ bắt tất cả các trường hợp ngoại lệ có thể xảy ra

Vì vậy, mặc dù cú pháp được cho phép, nhưng tôi không khuyên dùng nó. e. g. , bạn cũng sẽ bắt gặp các ngoại lệ

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
65 và
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
66 ngăn chương trình của bạn thoát khỏi. Thay vào đó, hãy sử dụng khối thử với danh sách các ngoại lệ rõ ràng mà bạn biết mình có thể xử lý. Hoặc, nếu bạn thực sự cần, hãy sử dụng lớp cơ sở
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8 để xử lý hầu hết các ngoại lệ thông thường, nhưng không phải ngoại lệ hệ thống

Nếu thích mạo hiểm, bạn có thể thử nắm bắt tất cả các ngoại lệ và xem điều gì sẽ xảy ra

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- Exception
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      .....
0

Bạn có thể cần phải đóng thiết bị đầu cuối của mình để dừng chương trình này. Bây giờ thay đổi khối except để bắt

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8. Bạn vẫn sẽ bắt được hầu hết các ngoại lệ, nhưng chương trình sẽ thoát khỏi các ngoại lệ hệ thống như
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
65 và
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
66

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- Exception
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      .....
4

Tốt hơn là cầu xin sự tha thứ

Trong Python, bạn sẽ thường thấy một mô hình mà mọi người chỉ cần thử xem thứ gì đó hoạt động và nếu không, hãy bắt ngoại lệ. Nói cách khác, thà xin lỗi còn hơn xin phép. Điều này trái ngược với các ngôn ngữ khác, nơi bạn nên xin phép. e. g. , trong Java, các ngoại lệ có thể làm chậm chương trình của bạn và bạn “xin phép” bằng cách kiểm tra một đối tượng thay vì chỉ thử

Để làm cho điều này cụ thể hơn. trong Python, chúng ta thường cố gắng truy cập khóa trong từ điển. Nếu khóa không tồn tại, chúng tôi sẽ có một ngoại lệ và xử lý nó. Giả sử chúng ta vừa chuyển đổi một số JSON được cung cấp bên ngoài thành từ điển và bây giờ hãy bắt đầu sử dụng nó

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
0

Điều này sẽ in lỗi

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
1

Chúng tôi có thể đã thêm ba séc (

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
11,
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
12, v.v. ) để đảm bảo rằng tất cả các trường đều ở đó. Nhưng đây không phải là một thực hành tốt. Nó có khả năng giới thiệu rất nhiều mã chỉ để kiểm tra xem các khóa có tồn tại không. Thay vào đó, chúng tôi yêu cầu sự tha thứ trong khối ngoại trừ của chúng tôi một lần, điều này rõ ràng và dễ đọc hơn nhiều. Và nếu bạn lo lắng về hiệu suất. ngoại lệ không chiếm nhiều chu kỳ CPU trong Python. Rất nhiều so sánh trên thực tế chậm hơn so với việc bắt một ngoại lệ duy nhất (nếu nó xảy ra. )

Tạo ngoại lệ tùy chỉnh

Tất cả các ngoại lệ tích hợp, không thoát khỏi hệ thống đều bắt nguồn từ lớp

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8 như chúng ta đã học trước đây. Tất cả các ngoại lệ do người dùng định nghĩa cũng phải được bắt nguồn từ lớp này. Vì vậy, nếu chúng ta muốn tạo các ngoại lệ của riêng mình, chúng ta cần tạo một lớp con của lớp
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8

Ví dụ: nếu bạn muốn tạo ngoại lệ cho biết không tìm thấy người dùng, bạn có thể tạo ngoại lệ

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
15. Điều này, ở dạng cơ bản nhất, trông như thế này

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
2

Lớp này kế thừa tất cả các thuộc tính và phương thức của lớp

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8, nhưng chúng tôi đặt cho nó một tên mới để phân biệt với lớp
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8. Bằng cách này, chúng tôi sẽ có thể bắt nó một cách cụ thể bằng một khối ngoại trừ

Tên của ngoại lệ này cho chúng ta biết rõ ràng loại sự cố đã gặp phải, vì vậy, như một phần thưởng bổ sung, nó cũng hoạt động như một dạng tài liệu mã. Cũng giống như các biến và hàm được đặt tên hay, một ngoại lệ được đặt tên hay có thể là một sự khác biệt lớn khi đọc lại mã của bạn

Chúng tôi sẽ sử dụng lớp này trong ví dụ sau

Tăng (hoặc ném) ngoại lệ

Chúng tôi biết một số ngoại lệ tích hợp và cách tạo ngoại lệ tùy chỉnh. Chúng tôi cũng biết cách bắt ngoại lệ bằng thử và ngoại trừ. Những gì còn lại, là những gì được gọi là nâng cao hoặc loại bỏ một ngoại lệ. Bạn có thể tự đưa ra một ngoại lệ với từ khóa nâng cao

Trong ví dụ dưới đây, chúng tôi sử dụng

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
15 được xác định trước đó của bạn. Chúng tôi gọi một hàm,
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
19, lấy một số dữ liệu người dùng từ cơ sở dữ liệu tưởng tượng. Nếu không tìm thấy người dùng, cơ sở dữ liệu này sẽ trả về Không có. Chúng tôi đã quyết định rằng chúng tôi không muốn trả về Không, điều này sẽ buộc người gọi phải kiểm tra Không mỗi lần. Thay vào đó, chúng tôi sử dụng
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
15 tùy chỉnh của chúng tôi

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
3

Phân công

Đây là một nhiệm vụ nhỏ. Thay vào đó, chúng ta có thể sử dụng một đối tượng Ngoại lệ thông thường. Bằng cách đó, chúng tôi không cần xác định tùy chỉnh. Tại sao đây là một ý tưởng tồi?

Câu trả lời

Trên thực tế, bạn có thể đưa ra một ngoại lệ thông thường, e. g. với

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
21. Nhưng nếu làm vậy, bạn cần bắt tất cả các ngoại lệ kiểu Exception. Và như chúng ta biết, có rất nhiều trong số đó. Rất có thể bạn vô tình bắt gặp một số ngoại lệ khác mà bạn không thể xử lý. Ví dụ: máy khách cơ sở dữ liệu có thể ném một
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
22 cũng là một lớp con của
try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
8

Cách in một ngoại lệ Python

Bạn có thể in trực tiếp các ngoại lệ miễn là bạn nắm bắt chúng đúng cách. Bạn có thể đã thấy các ví dụ về điều này ở trên rồi. Để rõ ràng, đây là một ví dụ về cách bắt và in một ngoại lệ

try:
    print(2/0)
except ZeroDivisionError:
    print("You can't divide by zero!")
4

Nếu bạn muốn in ngăn xếp cuộc gọi, giống như Python khi bạn không tự bắt ngoại lệ, bạn có thể nhập mô-đun theo dõi

ngoại trừ ngoại lệ như e trong Python là gì?

ngoại trừ là được sử dụng để nắm bắt và xử lý (các) ngoại lệ gặp phải trong mệnh đề thử . khác cho phép bạn mã các phần chỉ chạy khi không gặp ngoại lệ trong mệnh đề thử.

Ý nghĩa của ngoại trừ trong Python là gì?

Khối except cho phép bạn xử lý lỗi . Khối khác cho phép bạn thực thi mã khi không có lỗi. Khối cuối cùng cho phép bạn thực thi mã, bất kể kết quả của khối thử và ngoại trừ.

3 loại ngoại lệ chính trong Python là gì?

Có ba loại lỗi chính có thể phân biệt được trong Python. lỗi cú pháp, ngoại lệ và lỗi logic .

Lỗi giá trị ngoại trừ trong Python là gì?

Lỗi ValueError trong Python là một ngoại lệ xảy ra khi một hàm nhận được đối số thuộc loại dữ liệu chính xác nhưng lại nhận được giá trị không phù hợp . Lỗi này thường xảy ra trong các phép toán yêu cầu một loại giá trị nhất định.