Lỗi Python “TypeError: ‘int’ object is not subscriptable” xảy ra khi bạn cố coi một số nguyên giống như một đối tượng có thể đăng ký.
Trong Python, một đối tượng có thể đăng ký là một đối tượng mà bạn có thể “chỉ định” hoặc lặp lại.
Tại sao xảy ra lỗi “TypeError: ‘int’ object is not subscriptable Error”
Bạn có thể lặp qua một chuỗi, danh sách, bộ hoặc thậm chí từ điển. Nhưng không thể lặp qua một số nguyên hoặc tập hợp số.
Vì vậy, nếu bạn gặp lỗi này, điều đó có nghĩa là bạn đang cố lặp lại một số nguyên hoặc bạn đang coi một số nguyên là một mảng.
Trong ví dụ dưới đây, tôi đã viết ngày sinh (dob
biến) ở định dạng ddmmyy. Tôi đã cố gắng để có được tháng sinh nhưng nó không hoạt động. Nó báo lỗi “TypeError: ‘int’ object is not subscriptable”:
dob = 21031999
mob = dob[2:4]
print(mob)
# Output: Traceback (most recent call last):
# File "int_not_subable..py", line 2, in <module>
# mob = dob[2:4]
# TypeError: 'int' object is not subscriptable
Cách khắc phục lỗi “TypeError: ‘int’ object is not subscriptable”
Để khắc phục lỗi này, bạn cần chuyển đổi số nguyên thành kiểu dữ liệu có thể lặp lại, chẳng hạn như chuỗi.
Và nếu bạn gặp lỗi vì bạn đã chuyển đổi một số thứ thành một số nguyên, thì bạn cần thay đổi nó trở lại như ban đầu. Ví dụ: một chuỗi, bộ dữ liệu, danh sách, v.v.
Trong đoạn mã gây ra lỗi ở trên, tôi đã có thể làm cho nó hoạt động bằng cách chuyển đổi dob
biến thành một chuỗi:
dob = "21031999"
mob = dob[2:4]
print(mob)
# Output: 03
Nếu bạn gặp lỗi sau khi chuyển đổi thứ gì đó thành số nguyên, điều đó có nghĩa là bạn cần chuyển đổi lại thành chuỗi hoặc để nguyên như vậy.
Trong ví dụ dưới đây, tôi đã viết một chương trình Python in ngày sinh ở định dạng ddmmyy. Nhưng nó trả về một lỗi:
name = input("What is your name? ")
dob = int(input("What is your date of birth in the ddmmyy order? "))
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Hi, {name}, \nYour date of birth is {dd} \nMonth of birth is {mm} \nAnd year of birth is {yy}.")
#Output: What is your name? John Doe
# What is your date of birth in the ddmmyy order? 01011970
# Traceback (most recent call last):
# File "int_not_subable.py", line 12, in <module>
# dd = dob[0:2]
# TypeError: 'int' object is not subscriptable
Nhìn qua mã, tôi nhớ rằng đầu vào trả về một chuỗi, vì vậy tôi không cần chuyển đổi kết quả đầu vào ngày sinh của người dùng thành một số nguyên. Điều đó sửa lỗi:
name = input("What is your name? ")
dob = input("What is your date of birth in the ddmmyy order? ")
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Hi, {name}, \nYour date of birth is {dd} \nMonth of birth is {mm} \nAnd year of birth is {yy}.")
#Output: What is your name? John Doe
# What is your date of birth in the ddmmyy order? 01011970
# Hi, John Doe,
# Your date of birth is 01
# Month of birth is 01
# And year of birth is 1970.
Phần kết luận
Trong bài viết này, bạn đã tìm hiểu nguyên nhân gây ra lỗi “TypeError: ‘int’ object is not subscriptable” trong Python và cách khắc phục.
Nếu bạn gặp phải lỗi này, điều đó có nghĩa là bạn đang coi một số nguyên là dữ liệu có thể lặp lại. Số nguyên không thể lặp lại, vì vậy bạn cần sử dụng kiểu dữ liệu khác hoặc chuyển đổi số nguyên thành kiểu dữ liệu có thể lặp lại.
Và nếu lỗi xảy ra do bạn đã chuyển đổi thứ gì đó thành số nguyên, thì bạn cần thay đổi lại thành kiểu dữ liệu có thể lặp lại đó.
Cảm ơn bạn đã đọc.