TIẾT 47 - 48 - 49
BÀI 29: NHẬN BIẾT LỖI CHƯƠNG TRÌNH (KNTTVCS)
1. Phân biệt lỗi trong chương trình
Python
|
STT |
Đoạn chương trình |
Kết quả |
|
1 |
a = 3 if a % 2 == 0: print(a, 'là số chẵn') else print(a, 'là số lẻ') |
SyntaxError: Lỗi cú pháp ở dòng 4, lệnh else không có dấu
hai chấm |
|
2 |
if x > 5: print(x) print('x lớn hơn 5') |
NameError: name 'x' is not defined (Lỗi vì biến x chưa
được gán giá trị trước khi sử dụng) IndentationError: hàng 3 thụt lề không đúng vị trí |
|
3 |
my_list = [1, 2, 3, ] print(my_list) |
SyntaxError: lỗi xảy ra ở dòng khởi tạo danh sách vì dư dấu
phẩy Tuy nhiên, kể từ phiên
bản Python 3.1 trở đi thì hệ thống tự động nhận biết giá trị rỗng, nên biến my_list = [1, 2, 3] |
|
4 |
n = float(input('Nhập số thực n: ')) Người dùng nhập: 2,7 |
ValueError: could not convert string to float: '2,7' (Lỗi
vì hàm float() mong đợi dấu chấm '.' cho số thập phân, không phải dấu phẩy
',') |
|
5 |
python ls = ['Chào', 'Năm', 'Mới', 2024] print(ls[4]) |
IndexError: list index out of range (Lỗi vì chỉ số hợp
lệ là từ 0 đến 3, không có chỉ số 4) |
|
6 |
if delta == 0: x = -b / 2 * a print('Nghiệm:', x) |
Logic Error: sai cấu trúc tính toán |
Trong Python, các lỗi
chia làm 3 loại:
- SyntaxError (Lỗi cú pháp): Lỗi xảy ra khi trong chương trình có câu
lệnh viết sai cú pháp hoặc sai cấu trúc ngôn ngữ quy định.
- Exception (Lỗi ngoại lệ): Lỗi xảy ra khi trong chương trình không
thể thực hiện một câu lệnh nào đó (mặc dù cú pháp đúng) trong quá trình
thực thi.
- Lỗi ngữ nghĩa (logic): Lỗi xảy ra khi kết quả của chương trình
không đúng theo yêu cầu của bài toán (chương trình chạy không lỗi nhưng
sai kết quả mong muốn).
- Với mỗi loại lỗi, cách xử lý và kiểm soát
sẽ khác nhau.
2. Một số lỗi ngoại lệ (Exception)
thường gặp
a) ZeroDivisionError:
Lỗi xảy ra khi trong chương trình có lệnh thực hiện phép chia cho 0.
Ví dụ
a = 5
b = 0
print(a / b) # Gây lỗi
ZeroDivisionError
b) IndexError:
Lỗi xảy ra khi trong chương trình có lệnh truy cập phần tử (danh sách, xâu,
...) nhưng chỉ số lại vượt quá giới hạn.
Ví dụ
my_list = [10, 20, 30]
print(my_list[3]) # Gây lỗi
IndexError vì chỉ số lớn nhất là 2
c) NameError: Lỗi
xảy ra khi trong chương trình có lệnh liên quan đến một biến hoặc hàm nhưng
không tìm thấy (chưa được định nghĩa) biến hoặc hàm đó.
Ví dụ
print(break_your_variable) # Gây
lỗi NameError nếu break_your_variable chưa được gán giá trị
Jack(5, 3.5) # Gây lỗi NameError nếu hàm Jack chưa được định nghĩa
d) TypeError: Lỗi
kiểu dữ liệu - Lỗi xảy ra khi một phép toán hoặc hàm được áp dụng cho một đối
tượng có kiểu dữ liệu không phù hợp. Thường gặp ở các chương trình chưa kiểm
tra kiểu dữ liệu đầu vào.
Ví dụ
x = "hello"
y = 5
print(x + y) # Gây lỗi TypeError
vì không thể cộng chuỗi với số nguyên
e) ValueError:
Lỗi liên quan đến giá trị - Lỗi xảy ra khi trong chương trình có hàm nhận đối số
có kiểu đúng nhưng giá trị không hợp lệ. Thường xảy ra do lỗi đưa dữ liệu vào
hoặc do hạn chế của hàm.
Ví dụ
n = int("abc") # Gây lỗi
ValueError vì "abc" không thể chuyển thành số nguyên
f) IndentationError:
Lỗi xảy ra khi trong chương trình có một số hàng thụt lề không thẳng hàng hoặc
không đúng vị trí (sai cấu trúc khối lệnh).
Ví dụ
a = 10
if a > 5:
print("Lớn hơn 5") # Gây
lỗi IndentationError vì thiếu thụt lề