Python thường sinh ra các ngoại lệ (exception) khi có lỗi xảy ra trong quá trình thực thi. Tin học của em sẽ cùng bạn tìm hiểu về các ngoại lệ khác nhau được xây dựng trong ngôn ngữ này. Mời bạn đọc theo dõi.

Lỗi (Error)

Khi viết một chương trình, việc gặp lỗi thường xuyên là điều không thể tránh khỏi.

Có một số lỗi do không tuân theo cấu trúc đúng của cú pháp gây nên các lỗi lỗi cú pháp (syntax error hoặc parsing error).

>>> if a < 3
 File "<interactive input>", line 1
 if a < 3
 ^
SyntaxError: invalid syntax

Lệnh được viết trên bị thiếu dấu hai chấm trong câu lệnh IF lập tức chương trình báo lỗi cú pháp invalid syntax.

Ngoại lệ (Exception)

Ngoài ra, có trường hợp Python phát sinh lỗi khi đang thực thi chương trình (runtime error). Những lỗi này được gọi là ngoại lệ (Exception).

Ngoại lệ được Python tạo ra để xử lý vấn đề đó tránh cho chương trình bị hỏng.

Một số ví dụ về Exception như:

  • Mở một tệp không tồn tại (FileNotFoundError)
  • Chia một số cho 0 (ZeroDivisionError)
  • Không tìm thấy module được import (ImportError).
  • Truyền giá trị vào một function với đúng kiểu dữ liệu nhưng giá trị không thích hợp (ValueError).

Bất cứ khi nào có runtime error xảy ra, Python sẽ tạo một đối tượng ngoại lệ.

Nếu không được xử lý đúng cách, chương trình sẽ in ra lỗi và chi tiết về lý do có lỗi xảy ra.

>>> 1 / 0
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

>>> open("imaginary.txt")
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'

Ngoại lệ được Python tạo ra

Có rất nhiều ngoại lệ được Python tạo ra khi gặp các lỗi tương ứng.

Bạn có thể xem tất cả các trường hợp Exception có sẵn bằng cách sử dụng hàm local() như sau:

locals()['__builtins__']

Hàm này sẽ trả về một danh sách các ngoại lệ, chức năng và thuộc tính được Python tích hợp sẵn.

Tin học của em xin giới thiệu một số ngoại lệ được xây dựng sẵn trong Python cùng với lỗi gây ra nó trong bảng dưới đây:

Ngoại lệ Lý do gây ra
AssertionError Xảy ra khi câu lệnh assert thất bại.
AttributeError Xảy ra khi gán thuộc tính hoặc tham chiếu thất bại.
EOFError Xảy ra khi hàm input () chạm vào điều kiện end-of-file.
FloatingPointError Xảy ra khi một số thực dấy phẩy động thực thi không thành công
GeneratorExit Xảy ra khi phương thức close() của hàm generator được gọi.
ImportError Xảy ra khi không tìm thấy module được import.
IndexError Xảy ra khi một chỉ số trong chuỗi (sequence) nằm ngoài phạm vi.
KeyError Xảy ra khi không tìm thấy khóa ánh xạ (từ điển) trong tập hợp các khóa hiện có.
KeyboardInterrupt Xảy ra khi người dùng nhấn phím ngắt (thông thường là Ctrl-C hoặc Delete).
MemoryError Xảy ra khi một operation hết bộ nhớ nhưng tình huống vẫn có thể được sửa chữa (bằng cách xóa một số đối tượng).
NameError Xảy ra khi không tìm thấy tên cục bộ hoặc toàn cầu của biến.
NotImplementedError Xảy ra bằng các phương thức trừu tượng khi chúng yêu cầu các lớp dẫn xuất ghi đè phương thức.
OSError Xảy ra khi một hàm trả về lỗi liên quan đến hệ thống
OverflowError Xảy ra khi kết quả của phép toán số học quá lớn không thể biểu diễn.
ReferenceError Xảy ra khi một proxy tham chiếu yếu sử dụng để truy cập một thuộc tính của tham chiếu sau khi thu thập rác.
RuntimeError Xảy ra khi phát hiện thấy lỗi không thuộc bất kỳ danh mục nào khác.
StopIteration Xảy ra bằng phương thức next() của một vòng lặp để báo hiệu rằng không có giá trị nào được trả về bởi iterator.
SyntaxError Xảy ra khi gặp lỗi cú pháp.
IndentationError Xảy ra khi có lỗi thụt lề không chính xác.
TabError Xảy ra khi thụt lề sử dụng các tab và dấu cách không nhất quán.
SystemError Xảy ra khi trình thông dịch tìm thấy các lỗi nội bộ nhưng tình hình không quá nghiêm trọng.
SystemExit Xảy ra bởi hàm sys.exit().
TypeError Xảy ra khi một hàm hoặc phép thực thi (operation) áp dụng kiểu không chính xác cho một đối tượng.
UnboundLocalError Xảy ra khi tham chiếu tạo thành một biến cục bộ trong một hàm hoặc phương thức, nhưng không có giá trị nào bị ràng buộc với biến đó.
UnicodeError Xảy ra khi có lỗi liên quan đến Unicode
UnicodeEncodeError Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình mã hóa.
UnicodeDecodeError Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình giải mã.
UnicodeTranslateError Xảy ra khi lỗi liên quan đến Unicode trong quá trình dịch.
ValueError Xảy ra khi một phép toán hoặc hàm nhận được một đối số có kiểu đúng nhưng giá trị không phù hợp
ZeroDivisionError Xảy ra khi đối số thứ hai của phép chia hoặc phép toán modulo bằng 0.

Để xử lý những ngoại lệ này, bạn có thể sử dụng các câu lệnh try, except và finally.

Ngoài ra, bạn cũng có thể tự định nghĩa ngoại lệ của mình trong Python nếu cần thiết.

Hai vấn đề này sẽ được Tin học của em hướng dẫn trong các bài viết tiếp theo. Các bạn cùng theo dõi nhé.

22 BÌNH LUẬN

  1. I was suggested this website by means of my cousin. I am no longer positive whether this post is written by way of him as nobody else recognise such certain about my difficulty.
    You are incredible! Thanks!

  2. Wow, wonderful blog layout! How long have you been blogging for?
    you make blogging look easy. The overall look of your website
    is great, as well as the content!

  3. It’s the best time to make a few plans for the long run and it’s
    time to be happy. I’ve read thios publish and if I may I desire to suggest you some
    attention-grabbing things or advice. Maybe you can write subsequent articles relatig to this article.

    I want to learn more issues about it!

  4. Noticed anything refreshing from the. I did alternatively expertise several technical issues using this webpage, since I really experienced
    to reload the positioning a lot of times
    previous to I could receive the idea to load correctly.

  5. My coder is trying to convince me to move to .net from PHP.
    I have always disliked the idea because of the expenses.
    But he’s tryiong none the less. I’ve been using Movable-type on several websites for about
    a year and am nervous about switching to another platform.
    I have heard very good things about blogengine.net.

    Is there a way I can import all my wordpress posts into
    it? Any help would be greatly appreciated!

  6. Wow, wonderful blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your website is excellent, let alone the content!

  7. Existe también el llamado anillo de constricción. Otra marca de tadalafil es Adcirca. Se observó disminución en la presión sanguínea, que es, en general, pequeña y probablemente sin relevancia clínica con algunos antihipertensivos. Factores por los que se producen los problemas de impotencia.

  8. Can I simply say what a comfort to uncover a person that actually understands what they’re
    discussing on the internet. You definitely understand how to bring an issue to light and
    make it important. More and more people need to look
    at this and understand this side of the story. It’s surprising you aren’t
    more popular since you definitely possess the gift.

  9. Thank you for another informative website. The place else may I am getting that type of information written in such a perfect manner?
    I’ve a undertaking that I am simply now working on, and I have been on the glance out for such info.

  10. You actually make it seem so easy with your presentation but I find this matter to be actually
    something which I think I would never understand. It seems
    too complex and very broad for me. I’m looking forward for your next post, I’ll
    try to get the hang of it!

  11. Hi, Neat post. There is a problem along with your site in web explorer, might test this?
    IE still is the market chief and a good component to other
    people will omit your magnificent writing due to this problem.

  12. Unquestionably consider that that you said.
    Your favorite reason seemed to be at the web the easiest thing to take into account of.
    I say to you, I definitely get irked at the same time as
    other folks think about concerns that they just don’t realize about.
    You controlled to hit the nail upon the top as neatly as defined
    out the entire thing without having side-effects
    , other folks can take a signal. Will likely be again to get more.
    Thanks

  13. I have been browsing online more than three
    hours today, yet I never found any interesting article like yours.
    It’s pretty worth enough for me. Personally, if all web owners and
    bloggers made good content as you did, the web will be much more useful than ever before.

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here