Common Erros

NameError

Xảy ra khi một tên biến hoặc tên hàm, thư viện không được định nghĩa trong ngữ cảnh chương trình, xuất hiện khi tên hàm, tên biến không tồn tại, hoặc đã bị xóa, hoặc không tồn tại trong phạm vị hàm hoặc chương trình.

a = 4
c = a + b #NameError do b chưa được định nghĩa
print(c)

#---------------------------------------------------------#

a = 5
Print(a) #NameError do Python phân biệt chữ hoa và thường, nên chỉ có hàm print()

#---------------------------------------------------------#

def a_function(x):
		a_variable = 4
		result = x * a_variable
		
		return result
		
print(a_vaiable) #NameError do a_variable được khai báo trong hàm, nên khi gọi ngoài hàm sẽ không tồn tại

SyntaxError

Xảy ra khi phát hiện cấu trúc code ta viết không hợp lệ với Python. Ví dụ như thiếu/thừa ngoặc đơn, dùng sau từ khóa, hay thiếu dấu ‘:’ sau if → Nói chung là các lỗi liên qua đến ‘chính tả’ trong code Python.

s = 'Hello World" #SyntaxError do chuỗi có dấu đơn ở đầu và dấu đôi ở cuối → cần thống nhất dấu ở đầu và đuôi

print(s)

#---------------------------------------------------------#

import math

number = 20.2
print(math.floor(number) #SyntaxError do thiếu dấu ngoặc đơn đóng ở cuối

#---------------------------------------------------------#

print "Hello Word" #SyntaxError do cặp dấu ngoặc đơn

#---------------------------------------------------------#

number = 10
if number > 15         #SyntaxError do thiếu dấu ‘:’ sau câu lệnh if
		print("Large number")

ZeroDivisionError

Xảy ra khi ta thực hiện phép chia với mẫu bằng 0

a = 10
b = 0

c = a / b #ZeroDivisionError do chia với giá trị 0 (b = 0)

print(c) 

TypeError

Xảy ra khi thực hiện các phép toán hoặc hàm với dữ liệu có kiểu không phù hợp. VD: cộng chuỗi và số

a = 'AI'

b = 5

c = a + b #TypeError, do trong Python không cho phép cộng chuỗi và số

print(c)

IdentationError

Xảy ra khi việc thụt lề (identation) không nhất quán (có nơi thụt 2 space, nơi thì 3 space, …)

a = 5
	b = 6
	
c = a + b #IdentationError do b thụt vào nhưng không có nằm trong khối mã nào

print(c)

ModuleNotFoundError

Xảy ra khi Python không tìm thấy module (thư viện) ta cố import vào thư viện

Module (thư viện) là tập hợp các đoạn code được đóng gói lại để sử dụng trong các chương trình khác nhau

Một số nguyên nhân:

  • Module chưa được cài đặt: sử dụng lệnh pip install
  • Đường dẫn file chưa chính xác: khi module của ta là một file thì kiểm tra lại đường dẫn
  • PYTHONPATH (ít xảy ra): khi PYTHONPATH không được cài đặt đúng
import mymodule  #ModuleNotFoundError do mymodule chưa được cài hoặc không tìm thấy trong workspace hiện tại

print("Hello World")

IndexError

Xảy ra khi ta truy cập vào chỉ mục không tồn tại trong list hoặc tuple.

!!!Lưu ý, Python sử dụng chỉ mục từ 0 đến n - 1, với n là số lượng phần tử trong list/tuple

lst = [1, 2, 3, 4, 5]

print(lst[5])  #IndexError do index 5 không tồn tại
print(lst[0])

ValueError

Xảy ra khi hàm hoặc toán tử chấp nhận kiểu dữ liệu, nhưng giá trị lại không được chấp nhận với hàm đó (cụ thể tùy hàm)

import math

number = -4
print(math.sqrt(number)) #ValueError do không thể tính được căn bậc hai của số âm

#---------------------------------------------------------#

my_string = "Day la bai hoc dau tien"

my_string.index("Hello") #ValueError do giá trị ta tìm (”Hello”) không có trong chuỗi, 
													#có thể tránh bằng cách kiểm tra giá trị đó có tồn tại trước khi dùng index()
													

#---------------------------------------------------------#

str1 = '5'
str2 = 'hello'

value1 = int(str1) #hợp lệ cho chuỗi ‘5’ có thể chuyển thành số nguyên
value2 = int(str2) #ValueError do ‘hello’ không phải giá trị hợp lệ để thành số nguyên

RecursionError

Xảy ra khi hàm đệ quy không kết thúc hoặc quá nhiều dẫn đến vượt giới hạn đệ quy (recursion limit)

Mỗi lần hàm đệ quy được gọi, 1 frame mới được thêm vào stack của chương trình. Khi stack tràn, lỗi RecursionError xảy ra

def a_function(n):
		return a_function(n)

a_function(5) #hàm sẽ chạy mãi mãi → Recursion xảy ra
							#đảm bảo khi sử dụng đệ quy phải cho điều kiện dừng hợp lý để chấm dứt quá trình đệ quy