Khi bạn đang làm việc với các đối tượng có thể lặp lại như Danh sách, Bộ và Bộ trong Python, bạn có thể muốn gán các mục trong các đối tượng này cho các biến riêng lẻ. Đây là một quá trình được gọi là giải nén.
Trong quá trình giải nén các mục trong các đối tượng có thể lặp lại, bạn có thể gặp lỗi cho biết: “TypeError: không thể giải nén đối tượng NonType không thể lặp lại”.
Lỗi này chủ yếu xảy ra khi bạn cố gán một đối tượng với None
nhập vào một tập hợp các biến riêng lẻ. Điều này nghe có vẻ khó hiểu vào lúc này, nhưng nó sẽ rõ ràng hơn nhiều khi chúng ta xem một số ví dụ.
Trước đó, hãy nói về một số thuật ngữ chính được thấy trong thông báo lỗi. Chúng ta sẽ thảo luận về các thuật ngữ sau: TypeError, giải nén và Không có Type.
TypeError trong Python là gì?
TypeError trong Python xảy ra khi các kiểu dữ liệu không tương thích được sử dụng trong một thao tác.
Một ví dụ về TypeError, như bạn sẽ thấy trong các ví dụ ở các phần tiếp theo, là việc sử dụng một None
kiểu dữ liệu và một đối tượng có thể lặp lại trong một thao tác.
Giải nén trong Python là gì?
Để giải thích việc giải nén, bạn phải hiểu ý nghĩa của việc đóng gói.
Khi bạn tạo một danh sách với các mục trong Python, bạn đã “đóng gói” các mục đó vào một cấu trúc dữ liệu duy nhất. Đây là một ví dụ:
names = ["John", "Jane", "Doe"]
Trong đoạn mã trên, chúng tôi đã đóng gói “John”, “Jane” và “Doe” vào một danh sách có tên names
.
Để giải nén các mục này, chúng tôi phải gán từng mục cho một biến riêng lẻ. Đây là cách:
names = ["John", "Jane", "Doe"]
a, b, c = names
print(a,b,c)
# John Jane Doe
Vì chúng tôi đã tạo ra names
list, chúng ta có thể dễ dàng giải nén danh sách bằng cách tạo các biến mới và gán chúng vào danh sách: a, b, c = names
.
Cho nên a
sẽ lấy mục đầu tiên trong danh sách, b
sẽ mất thứ hai, và c
sẽ lấy thứ ba. Đó là:
a
= “John”b
= “Jane”c
= “Doe”
Không có Type trong Python là gì?
NoneType trong Python là một kiểu dữ liệu chỉ đơn giản là một đối tượng không có giá trị/có giá trị là None
.
Bạn có thể gán giá trị của None
vào một biến nhưng cũng có những phương thức trả về None
.
Chúng tôi sẽ giải quyết sort()
phương thức trong Python vì nó thường được liên kết với lỗi “TypeError: không thể giải nén đối tượng NoneType không thể lặp lại”. Điều này là do phương thức trả về một giá trị là None
.
Tiếp theo, chúng ta sẽ xem một ví dụ gây ra lỗi “TypeError: could unpack non-iterable NoneType object”.
Ví dụ về lỗi “TypeError: không thể giải nén đối tượng NoneType không thể lặp lại”
Trong phần này, bạn sẽ hiểu tại sao chúng tôi gặp lỗi khi sử dụng sort()
phương pháp không chính xác trước khi giải nén một danh sách.
names = ["John", "Jane", "Doe"]
names = names.sort()
a, b, c = names
print(a,b,c)
# TypeError: cannot unpack non-iterable NoneType object
Trong ví dụ trên, chúng tôi đã cố gắng sắp xếp các names
liệt kê theo thứ tự tăng dần bằng cách sử dụng sort()
phương pháp.
Sau đó, chúng tôi tiếp tục giải nén danh sách. Nhưng khi chúng tôi in ra các biến mới, chúng tôi gặp lỗi.
Điều này đưa chúng ta đến thuật ngữ quan trọng cuối cùng trong thông báo lỗi: non-iterable
. Sau khi phân loại, các names
danh sách đã trở thành một None
đối tượng chứ không phải danh sách (đối tượng có thể lặp lại).
Lỗi này đã được đưa ra bởi vì chúng tôi đã chỉ định names.sort()
đến names
. Từ names.sort()
lợi nhuận None
chúng tôi đã ghi đè và gán None
đến một biến đã từng là một danh sách. Đó là:
names
= names.sort()
nhưng names.sort()
= None
Vì thế names
= None
Vì vậy, thông báo lỗi đang cố nói với bạn rằng không có gì bên trong None
đối tượng để giải nén.
Điều này là khá dễ dàng để sửa chữa. Chúng ta sẽ làm điều đó trong phần tiếp theo.
Cách khắc phục lỗi “TypeError: Cannot Unpack Non-iterable NoneType Object” trong Python
Lỗi này xảy ra vì chúng tôi đã cố giải nén một None
vật. Cách đơn giản nhất để giải quyết vấn đề này là không gán names.sort()
như giá trị mới của danh sách của bạn.
Trong Python, bạn có thể sử dụng sort()
trên một tập hợp các biến mà không cần gán lại kết quả từ phép toán cho tập hợp đang được sắp xếp.
Đây là cách khắc phục sự cố:
names = ["John", "Jane", "Doe"]
names.sort()
a, b, c = names
print(a,b,c)
Doe Jane John
Mọi thứ hoạt động hoàn hảo ngay bây giờ. Danh sách đã được sắp xếp và giải nén.
Tất cả những gì chúng tôi thay đổi là names.sort()
thay vì sử dụng names
= names.sort()
.
Bây giờ, khi danh sách được giải nén, a, b, c
sẽ được chỉ định các mục trong names
theo thứ tự tăng dần. Đó là:
a
= “Doe”b
= “Jane”c
= “John”
Tóm lược
Trong bài viết này, chúng ta đã nói về lỗi “TypeError: could unpack non-iterable NoneType object” trong Python.
Chúng tôi đã giải thích các thuật ngữ chính được thấy trong thông báo lỗi: TypeError, giải nén, Không có Type và không thể lặp lại.
Sau đó chúng tôi đã thấy một số ví dụ. Ví dụ đầu tiên cho thấy cách lỗi có thể được đưa ra bằng cách sử dụng sort()
không chính xác trong khi ví dụ thứ hai chỉ ra cách sửa lỗi.
Mặc dù việc sửa lỗi “TypeError: could unpack non-iterable NoneType object” rất dễ, nhưng việc hiểu các thuật ngữ quan trọng trong thông báo lỗi là rất quan trọng. Điều này không chỉ giúp giải quyết lỗi cụ thể này mà còn giúp bạn hiểu và giải quyết các lỗi có các thuật ngữ tương tự trong đó.
Chúc mừng mã hóa!