<!DOCTYPE html>
	<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
	<head>
<title>Các phương pháp debug trong Python</title>
<meta name="description" content="Các phương pháp debug trong Python - Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;tin-cong-nghe&#x002F;cac-phuong-phap-debug-trong-python-453.html">
<meta name="author" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta name="copyright" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG [webmaster@tinhocdct.xyz]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.0">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Các phương pháp debug trong Python">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;tin-cong-nghe&#x002F;cac-phuong-phap-debug-trong-python-453.html">
<meta property="og:site_name" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta property="og:url" content="https://tinhocdct.xyz/tin-cong-nghe/cac-phuong-phap-debug-trong-python-453.html">
<link rel="shortcut icon" href="https://tinhocdct.xyz/favicon.ico">
<link rel="canonical" href="https://tinhocdct.xyz/tin-cong-nghe/cac-phuong-phap-debug-trong-python-453.html">
<link rel="alternate" href="https://tinhocdct.xyz/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-tuc/" title="Tin Tức - TIN TỨC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thong-cao-bao-chi/" title="Tin Tức - THÔNG BÁO" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ban-tin-noi-bo/" title="Tin Tức - BẢN TIN NỘI BỘ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-cong-nghe/" title="Tin Tức - CÔNG NGHỆ - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thu-thuat/" title="Tin Tức - THỦ THUẬT" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tien-ich/" title="Tin Tức - TIỆN ÍCH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ai/" title="Tin Tức - AI" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/khoa-hoc/" title="Tin Tức - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-chuyen-mon/" title="Tin Tức - HOẠT ĐỘNG CHUYÊN MÔN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-cong-doan/" title="Tin Tức - CÔNG ĐOÀN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-doan-the/" title="Tin Tức - ĐOÀN THỂ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-huong-nghiep/" title="Tin Tức - TUYỂN SINH - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-2025/" title="Tin Tức - TUYỂN SINH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/huong-nghiep/" title="Tin Tức - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/lich-cong-tac-tuan/" title="Tin Tức - Lịch công tác tuần" type="application/rss+xml">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/language/vi.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/global.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/news.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/main.js">
<link rel="preload" as="script" href="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js">
<link rel="StyleSheet" href="https://tinhocdct.xyz/assets/css/font-awesome.min.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/bootstrap.min.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/news.css">
<style>
	body{background: #fff;}
</style>
	</head>
	<body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG</h2>
		<p class="pull-right"><a title="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG" href="https://tinhocdct.xyz/">https://tinhocdct.xyz</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Các phương pháp debug trong Python</h1>
		<ul class="list-inline">
			<li>Thứ năm - 13/03/2025 07:51</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			Về cơ bản, debug là việc tìm kiếm và sửa lỗi trên máy tính. Khi chương trình không hoạt động như mong đợi, việc debug sẽ giúp chúng ta tìm ra nguyên nhân và sửa chữa các lỗi đó.
		</div>
				<div class="imghome">
			<img alt="Các phương pháp debug trong Python" src="https://tinhocdct.xyz/uploads/news/2025_03/blog-3.png" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p>Hôm nay chúng ta sẽ tìm hiểu về một khái niệm quan trọng khi làm việc với máy tính, đó là “debug”.</p>

<h2>1. Cách đọc thông báo lỗi</h2>

<figure><img alt="" height="924" loading="lazy" sizes="(max-width: 756px) 100vw, 756px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-4.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-4.png 756w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-4-245x300.png 245w" width="756" />
<figcaption>Traceback message trong Thonny khi chương trình gặp lỗi</figcaption>
</figure>

<p>Traceback message là thông báo lỗi được hiển thị trong Python khi có lỗi xảy ra trong quá trình thực thi chương trình. Thông báo bao gồm một loạt các dòng văn bản, thường bắt đầu với “<strong>Traceback (most recent call last):</strong>” và kết thúc với một dòng mô tả lỗi cụ thể. Các dòng ở thông báo traceback thường đi theo cặp với nhau. Dòng đầu tiên ở mỗi cặp có cấu trúc như sau:</p>

<p><strong>File&nbsp;</strong><strong>“&lt;file name&gt;”</strong><strong>, line &lt;number&gt;, in &lt;function&gt;</strong></p>

<p>File name: Tên file chứa lỗi</p>

<p>Number: Số thứ tự dòng trong file gây ra lỗi, hoặc số thứ tự dòng trong file chứa lần gọi hàm tiếp theo.</p>

<p>Function: tên của function trong dòng &lt;number&gt;</p>

<p>Dòng thứ hai hiển thị chính xác đoạn code ở dòng &lt;number&gt; gây ra lỗi. Dòng cuối cùng trong traceback message sẽ cho biết loại lỗi và thông tin chi tiết về lỗi và có cấu trúc như sau:</p>

<p><strong>&lt;error type&gt;: &lt;error message&gt;</strong></p>

<p>Error type: Loại lỗi đã được gây ra</p>

<p>Error message: Mô tả chi tiết hơn về nguyên nhân gây ra lỗi</p>

<p>&nbsp;Ở ví dụ trên, chương trình thực hiện tính diện tích hình chữ nhật (dien_tich) bằng cách tính tích của chiều dài và chiều rộng (chieu_dai * chieu_rong):</p>

<figure><img alt="" src="https://lh3.googleusercontent.com/QQ9uO6kKCunHNJlz2nynKKrNXcgH0sLcMpisHpdy6lEBgTTcGzj2RGvkzwdjcetd8jnxxNrSf0yCosfE3UyNF-SpVYBtzAxYvjPEsXuet_JS0eNyJSKEQh2sAmZ0hbLZbsOpHmFS_mjXykj1aOpuGBI" /></figure>

<p>và đây là thông báo lỗi sau khi chạy chương trình</p>

<p><img alt="" height="83" loading="lazy" src="https://lh5.googleusercontent.com/0p_q2PQzC0LIlC59Ae77jMZpwpXnlDNTudmmePASanUbv-qKavgrhXSo0ibZsA8ElBI1I5-dLMYn4iYhrSLBQW8WwvLNlU02prxoCQdnMXbdBVybi9CzBe4qPJfiNyZYaLZOrpqikFx0eD3rbbwLB7Q" width="501" /><br  />
<br  />
Trong ví dụ này, lỗi xảy ra khi chương trình cố gắng thực hiện phép tính toán trên biến ‘<strong>chieu_rong</strong>’ mà không được định nghĩa trước đó (khác với biến ‘<strong>chieu_dai</strong>‘ đã được định nghĩa trước đó qua dòng đầu tiên: chieu_dai = 10). Dòng cuối cùng cho biết rằng kiểu lỗi là NameError và biến ‘<strong>chieu_rong</strong>’ không được định nghĩa. Dòng trước cho biết lỗi xảy ra trong tệp “<strong>traceback-message.py</strong>” tại dòng số 2 trong hàm module.</p>

<h2>2. Các loại lỗi</h2>

<p>Dưới đây là một số kiểu lỗi phổ biến trong Python mà mọi người thường gặp:</p>

<h3><strong>1. SyntaxError: Lỗi cú pháp</strong></h3>

<p>Thường xảy ra khi bạn viết sai cú pháp trong Python, ví dụ như quên đóng dấu ngoặc hoặc sử dụng từ khoá không đúng cách.</p>

<ul>
	<li>Ví dụ:&nbsp;</li>
</ul>

<p>Ở ví dụ trên chúng ta có một danh sách điểm số và muốn in các điểm số ra màn hình, tuy nhiên chạy chương trình gặp thông báo lỗi như sau:</p>

<figure><img alt="" height="106" loading="lazy" sizes="(max-width: 696px) 100vw, 696px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-5.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-5.png 696w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-5-300x46.png 300w" width="696" /></figure>

<figure><img alt="" height="172" loading="lazy" sizes="(max-width: 862px) 100vw, 862px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-6.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-6.png 862w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-6-300x60.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-6-768x153.png 768w" width="862" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, lỗi xảy ra khi chúng ta viết sai cú pháp khi quên mất dấu phẩy ngăn cách giữa hai điểm số cuối cùng (10 và 9) khi tạo danh sách tại dòng 1. Sau khi thêm dấu phẩy còn thiếu, chương trình sẽ chạy bình thường như hình minh hoạ dưới đây:</p>

<figure><img alt="" height="1024" loading="lazy" sizes="(max-width: 836px) 100vw, 836px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-7-836x1024.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-7-836x1024.png 836w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-7-245x300.png 245w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-7-768x941.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-7.png 968w" width="836" /></figure>

<h3><strong>2. IndentationError: Lỗi thụt đầu dòng không đúng cách</strong></h3>

<p>Trong Python, thụt đầu dòng rất quan trọng và được sử dụng để xác định khối lệnh trong một hàm hoặc vòng lặp.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="108" loading="lazy" sizes="(max-width: 620px) 100vw, 620px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-10.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-10.png 620w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-10-300x52.png 300w" width="620" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Khi chạy chương trình này. chúng ta sẽ nhận lỗi như sau:&nbsp;&nbsp;</p>

<p><img alt="" height="93" loading="lazy" src="https://lh6.googleusercontent.com/hazhl0iKog2rFaosXKS3ZKD6Ravyb0wAluGU19uTN27BYGGQ9V-skhdnvNSIHIKfUoO_IY193c-3z084ct6dRn8x1a1xf5tcKuAD5FjCYFRs7keTkSQDitejpdxtOtYf_i19AJ3UrOVywmOkh8Av9h8" width="418" /><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, chúng ta quên thụt đầu dòng ở dòng số 3 sau câu lệnh for nên gặp lỗi IndentationError.</p>

<h3><strong>3. IndexError: Lỗi chỉ mục</strong></h3>

<p>Khi bạn cố gắng truy cập một phần tử trong danh sách hoặc chuỗi vượt quá phạm vi chỉ mục.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="76" loading="lazy" sizes="(max-width: 560px) 100vw, 560px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-8.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-8.png 560w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-8-300x41.png 300w" width="560" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Khi chạy chương trình này. chúng ta sẽ nhận lỗi như sau:</p>

<figure><img alt="" height="146" loading="lazy" sizes="(max-width: 852px) 100vw, 852px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-9.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-9.png 852w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-9-300x51.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-9-768x132.png 768w" width="852" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Trong chương trình này, chúng ta muốn truy cập phần tử cuối cùng của danh sách có 5 phần tử, tuy nhiên chỉ mục của danh sách bắt đầu tử chỉ mục 0, nên chỉ mục của phần tử cuối cùng của danh sách có 5 phần tử là 4. Sau khi sửa lại chúng ta sẽ có chương trình chạy bình thường như sau:</p>

<figure><img alt="" height="1024" loading="lazy" sizes="(max-width: 890px) 100vw, 890px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-11-890x1024.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-11-890x1024.png 890w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-11-261x300.png 261w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-11-768x884.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-11.png 980w" width="890" /></figure>

<h3><strong>3. TypeError: Lỗi kiểu dữ liệu</strong></h3>

<p>Khi bạn sử dụng sai kiểu dữ liệu hoặc không tương thích</p>

<ul>
	<li>Ví dụ:&nbsp;</li>
</ul>

<figure><img alt="" height="136" loading="lazy" sizes="(max-width: 716px) 100vw, 716px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-12.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-12.png 716w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-12-300x57.png 300w" width="716" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, chúng ta có hai biến a và b và muốn tính tổng của a và b và in ra màn hình. Tuy nhiên khi chạy chương trình, chúng ta gặp lỗi như sau:</p>

<figure><img alt="" height="150" loading="lazy" sizes="(max-width: 864px) 100vw, 864px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-13.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-13.png 864w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-13-300x52.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-13-768x133.png 768w" width="864" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Thông báo lỗi cho chúng ta biết rằng hai kiểu biến ‘int’ và ‘str’ không tương thích cho phép tính cộng ‘+’. Vì vậy, để sửa lỗi này, chúng ta cần chuyển kiểu dữ liệu của biến b sang ‘int’ hoặc ‘float’ để tương thích với biến a:</p>

<figure><img alt="" height="1024" loading="lazy" sizes="(max-width: 889px) 100vw, 889px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-14-889x1024.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-14-889x1024.png 889w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-14-261x300.png 261w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-14-768x884.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-14.png 964w" width="889" /></figure>

<h3><strong>5. NameError: Lỗi tên</strong></h3>

<p>Khi một biến hay tên hàm chưa được định nghĩa.</p>

<ul>
	<li>Ví dụ: Tương tự ví dụ biến “chieu_rong” chưa được định nghĩa ở phần 1.</li>
</ul>

<h2><strong>3. Các lỗi thường gặp</strong></h2>

<h3><strong>1. Chính tả:</strong></h3>

<p>Chú&nbsp; ý rằng Python phân biệt chữ hoa với chữ thường. Biến hello khác với biến Hello, HELLO, hay hEllO. Lỗi này thường sẽ được hiển thị dưới dạng NameError.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="80" loading="lazy" sizes="(max-width: 362px) 100vw, 362px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-15.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-15.png 362w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-15-300x66.png 300w" width="362" /></figure>

<figure><img alt="" height="142" loading="lazy" sizes="(max-width: 862px) 100vw, 862px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-16.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-16.png 862w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-16-300x49.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-16-768x127.png 768w" width="862" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, chú ý rằng myCourse và MyCourse là hai biến khác nhau và biến MyCourse chưa được định nghĩa trước đó nên khi chạy chương trình sẽ gặp lỗi NameError.</p>

<h3><strong>2. Thiếu dấu ngoặc đơn</strong></h3>

<p>Một lỗi phổ biến là bỏ qua dấu ngoặc đơn đóng. Việc nãy sẽ dẫn đến lỗi cú pháp SyntaxError.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="84" loading="lazy" sizes="(max-width: 350px) 100vw, 350px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-17.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-17.png 350w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-17-300x72.png 300w" width="350" /></figure>

<figure><img alt="" height="166" loading="lazy" sizes="(max-width: 858px) 100vw, 858px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-18.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-18.png 858w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-18-300x58.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-18-768x149.png 768w" width="858" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, ở dòng thứ hai câu lệnh print chúng ta thiếu dấu ngoặc đơn đóng nên khi chạy sẽ gặp lỗi “SyntaxError”.</p>

<h3><strong>3. Thiếu dấu ngoặc kép</strong></h3>

<p>Lỗi nãy giống với lỗi trước đó. Python sẽ thông báo với bạn chính xác số thứ tự dòng đã gây ra lỗi.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="90" loading="lazy" sizes="(max-width: 370px) 100vw, 370px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-19.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-19.png 370w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-19-300x73.png 300w" width="370" /></figure>

<figure><img alt="" height="190" loading="lazy" sizes="(max-width: 862px) 100vw, 862px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-20.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-20.png 862w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-20-300x66.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-20-768x169.png 768w" width="862" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, ở dòng đầu tiên chúng ta quên đóng dấu ngoặc kép khi gán một chuỗi cho biến myCourse nên khi chạy chương trình sẽ gặp thông báo lỗi như trên.</p>

<h3><strong>4. = vs ==</strong></h3>

<p>Chú ý rằng dấu “=” dùng cho việc gán giá trị vào biến, dấu “==” được sử dụng kiểm tra tính tương đương.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="112" loading="lazy" sizes="(max-width: 388px) 100vw, 388px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-21.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-21.png 388w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-21-300x87.png 300w" width="388" /></figure>

<figure><img alt="" height="186" loading="lazy" sizes="(max-width: 856px) 100vw, 856px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-22.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-22.png 856w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-22-300x65.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-22-768x167.png 768w" width="856" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, chú ý rằng ở dòng thứ hai n = 10 là ta đang gán giá trị 10 vào biến n chứ không phải kiểm tra tình tương đương. Để sửa lại, chúng ta cần viết “n = 10” thành “n == 10”.</p>

<h3><strong>5. Vòng lặp vô hạn</strong></h3>

<p>Vòng lặp vô hạn thường được gây ra bởi vòng lặp while khi điều kiện không bao giờ thay đổi hoặc điều kiện cuối không bao giờ xảy ra.</p>

<ul>
	<li>Ví dụ:</li>
</ul>

<figure><img alt="" height="104" loading="lazy" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-23.png" width="268" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Trong ví dụ này, trong vòng lặp while vì quên cập nhật biến n sau mỗi vòng lặp nên điều kiện n &lt; 10 không bao giờ xảy ra, vì vậy chương trình chạy vô hạn. Để sửa lại chúng ta cập nhật biến n như sau:</p>

<figure><img alt="" height="138" loading="lazy" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-24.png" width="272" /></figure>

<h3><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<strong>6. Lỗi Off-by-one</strong></h3>

<p>Lỗi này thường xảy ra khi ta muốn xử lý một tập hợp dữ liệu có độ dài cố định và nhầm lẫn trong việc tính toán số lượng của phần tử đó.&nbsp;</p>

<ul>
	<li>Ví dụ: Tương tự ví dụ về IndexError ở phần 2.</li>
</ul>

<h2><strong>4. Các phương pháp debug trong Python</strong></h2>

<h3><strong>1. Câu lệnh print:</strong></h3>

<p>Một trong những cách đơn giản nhất để debug trong Python là sử dụng hàm print() để hiển thị giá trị của biến trong chương trình. Ví dụ, nếu bạn đang phát triển một chương trình tính toán tổng của 10 số tự nhiên đầu tiên, bạn có thể in ra màn hình để kiểm tra giá trị của biến total sau mỗi vòng lặp như sau:</p>

<figure><img alt="" height="1024" loading="lazy" sizes="(max-width: 891px) 100vw, 891px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-25-891x1024.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-25-891x1024.png 891w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-25-261x300.png 261w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-25-768x882.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-25.png 966w" width="891" /></figure>

<h3><strong>2. Sử dụng Python Tutor để trực quan hoá mã nguồn</strong></h3>

<p>PythonTutor là một công cụ rất hữu ích giúp người dùng hiểu và theo dõi quá trình thực thi các chương trình Python. Say đây là các bước cơ bản để sử dụng Python Tutor:</p>

<ul>
	<li><strong>Bước 1:&nbsp;</strong>Đầu tiên các bạn truy cập vào trang web&nbsp;<a href="https://pythontutor.com/">https://pythontutor.com/</a>. Sau đó ở dòng bắt đầu với “Start coding now” các bạn bấm vào Python như hình dưới đây:</li>
</ul>

<figure><img alt="" height="872" loading="lazy" sizes="(max-width: 940px) 100vw, 940px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-26.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-26.png 940w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-26-300x278.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-26-768x712.png 768w" width="940" /></figure>

<ul>
	<li><strong>Bước 2:</strong>&nbsp;Tiếp theo, các bạn nhập chương trình Python vào ô văn bản bên trái của trang web hoặc sao chép và dán nó từ một nguồn bên ngoài.&nbsp;</li>
</ul>

<figure><img alt="" height="618" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27-1024x618.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27-1024x618.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27-300x181.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27-768x463.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27-1200x724.png 1200w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-27.png 1472w" width="1024" /></figure>

<ul>
	<li><strong>Bước 3:&nbsp;</strong>Sau khi nhập trong mọi người nhấn vào nút “Visualize execution” để bắt đầu quá trình thực thi.&nbsp;</li>
</ul>

<figure><img alt="" height="632" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28-1024x632.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28-1024x632.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28-300x185.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28-768x474.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28-1200x740.png 1200w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-28.png 1452w" width="1024" /></figure>

<ul>
	<li><strong>Bước 4:</strong>&nbsp;Theo dõi quá trình thực thi trên biểu đồ bên phải của trang web. Nó sẽ hiển thị các biến và giá trị của chúng trên từng dòng lệnh trong chương trình. Để xem cách thực thi từng dòng lệnh, các bạn có thể nhấn vào các nút “Next” hoặc “Prev” để di chuyển tới dòng lệnh tiếp theo hoặc dòng lệnh trước đó. Bạn cũng có thể thay đổi tốc độ thực thi bằng cách sử dụng thanh kéo bên trái của trang web.&nbsp;</li>
</ul>

<figure><img alt="" height="398" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-1024x398.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-1024x398.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-300x117.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-768x299.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-1536x597.png 1536w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29-1200x467.png 1200w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-29.png 1600w" width="1024" /></figure>

<h3><strong>3. Sử dụng công cụ debug trong Thonny</strong></h3>

<p>Trong Thonny có một trình sửa lỗi, cho phép người dùng người dùng đi qua từng bước trong chương trình. Ở phía trên cửa sổ Thonny, bên cạnh nút chạy chương trình, các bạn sẽ thấy một dãy các nút như sau:</p>

<figure><img alt="" height="44" loading="lazy" sizes="(max-width: 320px) 100vw, 320px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-30.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-30.png 320w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-30-300x41.png 300w" width="320" /></figure>

<p><br  />
<br  />
<br  />
Để kích hoạt trình sửa lỗi, các bạn bấm vào nút có biểu tượng con bọ. Sau khi bấm xong, các nút sẽ thay đổi như sau:</p>

<figure><img alt="" height="45" loading="lazy" sizes="(max-width: 319px) 100vw, 319px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-31.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-31.png 319w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-31-300x42.png 300w" width="319" /></figure>

<p><br  />
<br  />
<br  />
<br  />
Những nút này sẽ giúp chúng ta kiểm soát luồng chương trình theo từng bước, và Thonny sẽ hiển thị chính xác những gì đang diễn ra bằng cách đánh dấu phần mã đang được thực thi. Ngoài ra thì các bạn cũng có thể đặt các điểm dừng (breakpoints) trong chương trình. Điểm dừng là một vị trí trong mã nguồn mà chương trình sẽ dừng lại và chờ cho người dùng kiểm tra các giá trị và trạng thái của chương trình tại thời điểm đó. Để đặt điểm dừng, các bạn bấm vào số thứ tự ở bên lề tại dòng mà các bạn muốn chương trình dừng lại. Sau khi bấm xong, dòng có điểm dừng sẽ được đánh dấu bằng một hình tròn màu đỏ như hình dưới đây.</p>

<figure><img alt="" height="138" loading="lazy" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-32.png" width="220" /></figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Để xoá điểm dừng, các bạn đơn giản chỉ cần bấm lại vào hình tròn màu đỏ các bạn muốn xoá.&nbsp;</p>

<ul>
	<li>Ví dụ:&nbsp;</li>
</ul>

<p>Ở ví dụ này, giả sự chúng ta muốn theo dõi giá trị của từng biến qua từng vòng lặp for trong quá trình chạy chương trình.</p>

<figure><img alt="" height="797" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33-1024x797.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33-1024x797.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33-300x234.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33-768x598.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33-1200x934.png 1200w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-33.png 1500w" width="1024" /></figure>

<p>Đầu tiên chúng ta sẽ đặt điểm dừng (breakpoint) ở dòng mà chúng ta muốn chương trình dừng lại (ở đây là dòng số 4).</p>

<figure><img alt="" height="793" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34-1024x793.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34-1024x793.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34-300x232.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34-768x595.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34-1200x929.png 1200w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-34.png 1498w" width="1024" /></figure>

<p>Sau đó, ở trên thanh menu, chúng ta chọn View &gt;&gt; Variables, khi đó Thonny sẽ hiện ra một cửa sổ để các bạn theo dõi các biến trong quá trình chương trình chạy.</p>

<figure><img alt="" src="https://lh5.googleusercontent.com/E6htqej8nTepvDhQoc7s15uRRHCoKzNgAG9kGXGXi1qnjEqDRhDthUcVZVBsNW94cuMxRAr3_7L7DTxBG8zsT1ASi69OeEhS4VP7W_6WX24VtRkE1TaTFS2AmSJ0QzODp2aUaPCLodnM8Ry6kvrGJbA" /></figure>

<p>Các bạn bấm vào biểu tượng con bọ để bắt đầu debug, chương trình sẽ dừng lại ở dòng thứ 4 như hình bên dưới. Ở khung cửa số Variables, các bạn có thể thấy giá trị của các biến trong vòng lặp đầu tiên đã được cập nhật.</p>

<figure><img alt="" height="796" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" src="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-36-1024x796.png" srcset="https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-36-1024x796.png 1024w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-36-300x233.png 300w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-36-768x597.png 768w, https://steamvn-blog.sfo2.cdn.digitaloceanspaces.com/2023/04/image-36.png 1140w" width="1024" /></figure>

<p>Sau đó, chúng ta sẽ sử dụng các nút Step over, Step into, Step out, Resume và Stop để kiểm soát luồng chương trình:</p>

<ul>
	<li>Step Over: Thực thi lệnh hiện tại và di chuyển đến lệnh tiếp theo trong mã nguồn.</li>
	<li>Step Into: Lệnh này cho phép bạn “nhảy” vào trong một hàm, phương thức hoặc các lệnh con khác được gọi trong chương trình của mình.</li>
	<li>Step Out: Thoát ra khỏi hàm hoặc phương thức đang được thực thi và trở lại dòng gọi hàm hoặc&nbsp; phương thức đó.</li>
	<li>Resume: Tiếp tục thực thi chương trình cho đến khi kết thúc.</li>
	<li>Stop: Dừng chương trình.</li>
</ul>

<p>Chúc các bạn thành công!</p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả bài viết:</strong>
				Thanh Sơn
			</p>
						<p>
				<strong>Nguồn tin:</strong>
				www.steamforvietnam.org
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://tinhocdct.xyz/tin-cong-nghe/cac-phuong-phap-debug-trong-python-453.html" title="Các phương pháp debug trong Python">https://tinhocdct.xyz/tin-cong-nghe/cac-phuong-phap-debug-trong-python-453.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG
		</div>
		<div id="contact">
			<a href="mailto:webmaster@tinhocdct.xyz">webmaster@tinhocdct.xyz</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://tinhocdct.xyz/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=1,nv_is_recaptcha=0;</script>
<script src="https://tinhocdct.xyz/assets/js/language/vi.js"></script>
<script src="https://tinhocdct.xyz/assets/js/global.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/news.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/main.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198"
     crossorigin="anonymous"></script>
<script src="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js"></script>
</body>
</html>