Ngoại lệ trong Python là gì?

<p>Trong b&agrave;i trước, ch&uacute;ng ta đ&atilde; t&igrave;m hiểu về c&aacute;c lỗi c&uacute; ph&aacute;p phổ biến hay gặp khi bắt đầu lập tr&igrave;nh Python. Trong b&agrave;i n&agrave;y ch&uacute;ng ta sẽ </p> <p>Lỗi Logic trong Python (Ngoại lệ)</p> <p>C&aacute;c lỗi xảy ra trong thời gian thực thi (sau khi được kiểm tra c&uacute; ph&aacute;p) được gọi l&agrave; ngoại lệ hoặc lỗi Logic.</p> <p>V&iacute; dụ: Ngoại lệ sẽ ra khi ch&uacute;ng ta cố gắng mở một tệp (để đọc) kh&ocirc;ng tồn tại (FileNotFoundError), cố gắng chia một số cho gi&aacute; trị l&agrave; 0 (ZeroDivisionError) hoặc cố gắng th&ecirc;m một m&ocirc;-đun kh&ocirc;ng tồn tại (ImportError).</p> <p>Bất cứ khi n&agrave;o c&aacute;c loại lỗi trong thời gian chạy n&agrave;y xảy ra, Python sẽ tạo một đối tượng ngoại lệ. Nếu kh&ocirc;ng được xử l&yacute; đ&uacute;ng c&aacute;ch, n&oacute; sẽ in ra lỗi c&ugrave;ng với một số chi tiết về l&yacute; do tại sao lỗi đ&oacute; xảy ra.</p> <p>V&iacute; dụ:</p> <pre class="language-python"><code>import tek4</code></pre> <p>Trong đoạn m&atilde; tr&ecirc;n, ch&uacute;ng ta đ&atilde; th&ecirc;m một m&ocirc;-đun kh&ocirc;ng tồn tại c&oacute; t&ecirc;n l&agrave; tek4. Do đ&oacute;, ta sẽ gặp phải ngoại lệ trong trường hợp n&agrave;y.</p> <h2>3. C&aacute;c ngoại lệ được t&iacute;ch hợp trong Python</h2> <p>H&agrave;nh động bất hợp ph&aacute;p c&oacute; thể g&acirc;y ra ngoại lệ. C&oacute; rất nhiều ngoại lệ được t&iacute;ch hợp sẵn trong Python được n&ecirc;u ra khi c&aacute;c lỗi tương ứng xảy ra. Ch&uacute;ng ta c&oacute; thể xem tất cả c&aacute;c ngoại lệ c&oacute; sẵn bằng c&aacute;ch sử dụng h&agrave;m <code class="EnlighterJSRAW" data-enlighter-language="generic">local()</code>được t&iacute;ch hợp sẵn như sau.</p> <pre class="language-python"><code>print(dir(locals()['__builtins__']))</code></pre> <p>local () ['__ builtins__'] sẽ trả về một m&ocirc;-đun bao gồm c&aacute;c ngoại lệ, h&agrave;m v&agrave; thuộc t&iacute;nh được t&iacute;ch hợp sẵn. H&agrave;m dir cho ph&eacute;p ch&uacute;ng ta liệt k&ecirc; c&aacute;c thuộc t&iacute;nh n&agrave;y dưới dạng chuỗi.</p> <p>Một số ngoại lệ t&iacute;ch hợp sẵn trong lập tr&igrave;nh Python c&ugrave;ng với lỗi g&acirc;y ra được liệt k&ecirc; b&ecirc;n dưới:</p> <table> <tbody> <tr> <td style="text-align: center;">Ngoại lệ</td> <td style="text-align: center;">Nguy&ecirc;n nh&acirc;n</td> </tr> <tr> <td style="text-align: center;">AssertionError</td> <td>Được đưa ra khi c&acirc;u lệnh assert bị lỗi.</td> </tr> <tr> <td style="text-align: center;">AttributeError</td> <td>Được đưa ra khi việc g&aacute;n thuộc t&iacute;nh hay tham chiếu thất bại.</td> </tr> <tr> <td style="text-align: center;">EOFError</td> <td>Được đưa ra khi h&agrave;m input() gặp phải điều kiện kết th&uacute;c file.</td> </tr> <tr> <td style="text-align: center;">FloatingPointError</td> <td>Được đưa ra khi thao t&aacute;c với số thập ph&acirc;n sai.</td> </tr> <tr> <td style="text-align: center;">GeneratorExit</td> <td>Được đưa ra khi h&agrave;m close() của đối tượng Generator được gọi.</td> </tr> <tr> <td style="text-align: center;">ImportError</td> <td>Được đưa ra khi th&ecirc;m một m&ocirc;-đun kh&ocirc;ng tồn tại.</td> </tr> <tr> <td style="text-align: center;">IndexError</td> <td>Được đưa ra khi chỉ số của tập hợp nằm ngo&agrave;i phạm vi cho ph&eacute;p.</td> </tr> <tr> <td style="text-align: center;">KeyError</td> <td>Được đưa ra khi kh&oacute;a kh&ocirc;ng được t&igrave;m thấy trong đối tượng kiểu từ điển.</td> </tr> <tr> <td style="text-align: center;">KeyboardInterrupt</td> <td>Được đưa ra khi người d&ugrave;ng nhấn ph&iacute;m ngắt gồm Ctrl+C hoặc Delete</td> </tr> <tr> <td style="text-align: center;">MemoryError</td> <td>Được đưa ra khi việc thực thi sử dụng hết bộ nhớ.</td> </tr> <tr> <td style="text-align: center;">NameError</td> <td>Được đưa ra khi một biến kh&ocirc;ng được t&igrave;m thấy trong phạm vi cục bộ hoặc to&agrave;n cục.</td> </tr> <tr> <td style="text-align: center;">NotImplementedError</td> <td>Được đưa ra bởi c&aacute;c phương thức trừu tượng.</td> </tr> <tr> <td style="text-align: center;">OSError</td> <td>Được đưa ra khi việc thực thi hệ thống g&acirc;y ra c&aacute;c lỗi về hệ thống.</td> </tr> <tr> <td style="text-align: center;">OverflowError</td> <td>Được đưa ra khi kết quả của một ph&eacute;p to&aacute;n qu&aacute; lớn hoặc kh&ocirc;ng thể biểu diễn.</td> </tr> <tr> <td style="text-align: center;">ReferenceError</td> <td>Được đưa ra khi một proxy tham chiếu yếu được sử dụng để truy cập v&agrave;o địa chỉ tham chiếu được thu thập.</td> </tr> <tr> <td style="text-align: center;">RuntimeError</td> <td>Được đưa ra khi một lỗi kh&ocirc;ng thuộc v&agrave;o bất kỳ kiểu lỗi n&agrave;o.</td> </tr> <tr> <td style="text-align: center;">StopIteration</td> <td>Được đưa ra bởi h&agrave;m next() để chỉ ra rằng kh&ocirc;ng c&ograve;n phần tử n&agrave;o được trả về bởi đối tượng lặp.</td> </tr> <tr> <td style="text-align: center;">SyntaxError</td> <td>Được đưa ra khi một lỗi xảy ra.</td> </tr> <tr> <td style="text-align: center;">IndentationError</td> <td>Được đưa ra khi việc thụt lề sai.</td> </tr> <tr> <td style="text-align: center;">TabError</td> <td>Được đưa ra khi việc thụt lệ chứa c&aacute;c khoảng trắng kh&ocirc;ng nhất qu&aacute;n.</td> </tr> <tr> <td style="text-align: center;">SystemError</td> <td>Được đưa ra khi lỗi hệ thống b&ecirc;n trong xảy ra.</td> </tr> <tr> <td style="text-align: center;">SystemExit</td> <td>Được đưa ra bởi h&agrave;m sys.exit().</td> </tr> <tr> <td style="text-align: center;">TypeError</td> <td>Được đưa ra khi một h&agrave;m hoặc một thao t&aacute;c được &aacute;p dụng cho đối tượng kh&ocirc;ng đ&uacute;ng kiểu dữ liệu.</td> </tr> <tr> <td style="text-align: center;">UnboundLocalError</td> <td>Được đưa ra khi một tham chiếu đến một biến cục trong một h&agrave;m nhưng kh&ocirc;ng c&oacute; gi&aacute; trị n&agrave;o được g&aacute;n cho biến đ&oacute;.</td> </tr> <tr> <td style="text-align: center;">UnicodeError</td> <td>Được đưa ra khi thực hiện encoding li&ecirc;n quan tới Unicode bị lỗi.</td> </tr> <tr> <td style="text-align: center;">UnicodeEncodeError</td> <td>Được đưa ra khi c&aacute;c lỗi li&ecirc;n quan tới Unicode xảy ra trong khi thực hiện encoding.</td> </tr> <tr> <td style="text-align: center;">UnicodeDecodeError</td> <td>Được đưa ra khi c&aacute;c lỗi li&ecirc;n quan tới Unicode xảy ra trong khi thực hiện decoding.</td> </tr> <tr> <td style="text-align: center;">UnicodeTranslateError</td> <td>Được đưa ra khi lỗi li&ecirc;n quan tới Unicode xảy ra trong khi chuyển đổi.</td> </tr> <tr> <td style="text-align: center;">ValueError</td> <td>Được đưa ra khi một h&agrave;m nhận một tham số đ&uacute;ng kiểu dữ liệu kh&ocirc;ng đ&uacute;ng gi&aacute; trị.</td> </tr> <tr> <td style="text-align: center;">ZeroDivisionError</td> <td>Được đưa ra khi to&aacute;n hạng thứ 2 của ph&eacute;p chia c&oacute; gi&aacute; trị l&agrave; 0.</td> </tr> </tbody> </table> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về ngoại lệ trong Python. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo về lập tr&igrave;nh Python tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>