
Xử lý lỗi với Try / Except trong Python
1. Try / Except là gì?
Try / Except cho phép Python:
- Cố gắng chạy một đoạn code (try block)
- Nếu có lỗi xảy ra, nó sẽ bắt lỗi và chạy đoạn code xử lý (except block)
- Chương trình không bị crash
Cú pháp:
try:
# đoạn code có thể gây lỗi
except SomeErrorType:
# xử lý khi lỗi xảy ra2. Ví dụ cơ bản
Giả sử người dùng nhập chữ thay vì số:
try:
value = int(input("Nhập số ngày: "))
print(value * 24)
except ValueError:
print("Input không phải là số hợp lệ!")Giải thích:
int()sẽ gây lỗi ValueError nếu input không phải dạng số
except ValueError:bắt đúng loại lỗi đó
- Chương trình không bị crash, mà in ra thông báo thân thiện
3. Tại sao dùng Try / Except thay vì If / Else?
| If / Else | Try / Except |
|---|---|
| Dùng để kiểm tra trước khi chạy code | Dùng để xử lý lỗi trong khi chạy |
| Cần viết điều kiện cho từng trường hợp | Một lỗi cũng đủ để nhảy vào except |
| Không bắt được lỗi bất ngờ | Bắt được lỗi không dự đoán trước |
4. Ví dụ nâng cao — try / except bắt lỗi ValueError
Chúng ta thử nhập text, float, hay bất cứ giá trị sai:
try:
user_input = input("Nhập số ngày:\n")
user_number = int(user_input) # nơi có thể lỗi
print(f"{user_number} ngày = {user_number * 24} giờ")
except ValueError:
print("Input không phải dạng số nguyên hợp lệ!")
Kết quả:
- Nhập
"abc"→ except chạy
- Nhập
"19.99"→ except chạy
- Nhập
"10"→ chạy bình thường
5. Bắt mọi lỗi (không khuyến khích)
try:
value = int(input("Nhập số: "))
print(value * 10)
except:
print("Có lỗi xảy ra!")
Không nên dùng except: trống, vì:
- Bắt luôn cả lỗi nghiêm trọng
- Khó debug
- Không biết lỗi là gì
6. Kết hợp Try / Except với Validation
Try / Except bắt lỗi chuyển kiểu, nhưng:
- Số âm
- Số 0
→ không gây lỗi, nên phải kiểm tra bằng if.
Code hoàn chỉnh:
def days_to_hours(num_days):
return num_days * 24
try:
user_input = input("Nhập số ngày: ")
user_number = int(user_input) # Bắt lỗi nếu không phải số
if user_number > 0:
print(days_to_hours(user_number))
elif user_number == 0:
print("Không chấp nhận số 0!")
else:
print("Số âm không hợp lệ!")
except ValueError:
print("Input không phải số hợp lệ!")7. Nhiều except cho nhiều loại lỗi
try:
number = int(input("Nhập số: "))
result = 100 / number
except ValueError:
print("Bạn phải nhập số!")
except ZeroDivisionError:
print("Không thể chia cho 0!")8. Khối finally (luôn chạy)
try:
a = int(input("Nhập số: "))
except ValueError:
print("Sai định dạng!")
finally:
print("Kết thúc chương trình!")TÓM TẮT KIẾN THỨC
try→ chạy code có thể lỗi
except→ chạy khi lỗi xảy ra
except ErrorType→ bắt đúng loại lỗi
except:→ bắt mọi lỗi (tránh dùng)
else:→ chạy nếu không có lỗi
finally:→ luôn chạy
EXERCISES + ANSWERS
Exercise 1 — Basic try/except
Yêu cầu:
Nhập một số. Nếu không phải số → in lỗi.
Answer:
try:
x = int(input("Nhập số: "))
print("Bạn nhập:", x)
except ValueError:
print("Đó không phải là số!")Exercise 2 — Divide with try/except
Yêu cầu:
Nhập số chia (100 / n), xử lý lỗi:
- ValueError
- ZeroDivisionError
Answer:
try:
n = int(input("Nhập số để chia: "))
print(100 / n)
except ValueError:
print("Không phải số!")
except ZeroDivisionError:
print("Không được chia cho 0!")Exercise 3 — Days converter with try/except + validation
Yêu cầu:
- Nhập số ngày
- Bắt lỗi input
- Nếu âm → báo lỗi
- Nếu 0 → báo lỗi
- Nếu hợp lệ → tính giờ
Answer:
try:
d = int(input("Nhập số ngày:\n"))
if d > 0:
print(f"{d} ngày = {d * 24} giờ")
elif d == 0:
print("Số 0 không hợp lệ!")
else:
print("Không chấp nhận số âm!")
except ValueError:
print("Input không phải số!")Exercise 4 — Multiple error types
Yêu cầu:
Tính a / b, xử lý:
- ValueError
- ZeroDivisionError
- bất kỳ lỗi khác → “unknown error”
Answer:
try:
a = int(input("a = "))
b = int(input("b = "))
print(a / b)
except ValueError:
print("Bạn phải nhập số nguyên!")
except ZeroDivisionError:
print("Không được chia cho 0!")
except:
print("Unknown error")Exercise 5 — Try/Except with return inside function
Viết hàm:
- Nhận input từ người dùng
- Chuyển thành số bằng try
- Nếu lỗi → return thông báo
- Nếu đúng → return số nhân 10
Answer:
def convert_and_multiply():
try:
x = int(input("Nhập số: "))
return x * 10
except ValueError:
return "Input không phải số!"
print(convert_and_multiply())