HomeLập trìnhPythonkhông thể giải...

không thể giải nén đối tượng nontype không thể lặp lại – Cách khắc phục trong Python


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.

Đọc thêm  Cách sử dụng *args và **kwargs trong Python

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.

Đọc thêm  Quét web bằng Python – Cách cạo dữ liệu từ Twitter bằng Tweepy và Snscrape

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 Nonechú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.

Đọc thêm  Mô-đun datetime của Python – Cách xử lý ngày tháng trong Python

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!



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status