đối tượng không thể đăng ký” Lỗi trong Python
Thay vào đó, bạn đang cố gắng truy xuất dữ liệu từ một đối tượng và thấy lỗi “đối tượng không thể đăng ký”? Vấn đề là bạn đang lập chỉ mục loại dữ liệu sai.
Tìm hiểu tất cả về các loại có thể đăng ký và cách khắc phục lỗi này.
Mục Lục
“Có thể đăng ký” có nghĩa là gì trong Python?
Thuật ngữ “có thể đăng ký” trong Python có nghĩa là một kiểu dữ liệu lưu trữ nhiều giá trị mà bạn có thể truy cập riêng lẻ. Bạn có thể truy cập một giá trị cụ thể từ một loại dữ liệu có thể đăng ký thông qua chỉ mục của nó, sử dụng dấu ngoặc vuông ([]) ký hiệu.
Nếu bạn cố gắng truy cập các mục trong loại dữ liệu không thể lập chỉ mục, Python sẽ phát sinh ngoại lệ “TypeError: object is not subscriptable”.
Các loại dữ liệu sau đây có thể đăng ký được trong Python: danh sách, chuỗi, bộ dữ liệu và từ điển.
list_example = [1, 3, 5, "Idowu"]
string_example = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"name": "Idowu", "Language": "Yoruba"}print(list_example[0])
print(string_example[3])
print(tuple_example[1])
print(dict_example["name"])
Tuy nhiên, các tập hợp, số nguyên, số float và Booleans không thể truy cập được thông qua lập chỉ mục, vì vậy chúng không thể đăng ký được:
float_example = 12.45
int_example = 12367
bool_example = True
set_example = {1, 3, 5, "Python"}print(float_example[1])
print(bool_example[2])
print(int_example[2])
print(set_example[2])
Cố gắng chạy từng câu lệnh này sẽ tạo ra ngoại lệ “đối tượng không thể đăng ký”:
Giải quyết ngoại lệ
Việc giải quyết ngoại lệ “đối tượng không thể đăng ký” sẽ dễ dàng hơn khi bạn hiểu các quy tắc để truy cập từng loại dữ liệu. Vì vậy, hãy bắt đầu gỡ lỗi Python của bạn bằng cách kiểm tra kiểu dữ liệu của đối tượng mà bạn đang cố lập chỉ mục.
float_example = 12.45
int_example = 12367
bool_example = True
set_example = {1, 3, 5, "Python"}print(type(float_example))
print(type(int_example))
print(type(bool_example))
print(type(set_example))
Sau khi bạn xác định rằng loại dữ liệu không thể đăng ký được, việc chuyển đổi nó thành loại có thể lập chỉ mục sẽ giải quyết vấn đề. Điều này rất hữu ích nếu dữ liệu đến từ API của bên thứ ba. Chuyển đổi các loại dữ liệu như số nguyên, float và Boolean thành một chuỗi làm cho chúng có thể đăng ký được:
print(str(float_example)[:2])
print(str(int_example)[:2])
print(str(bool_example)[:2])
Bạn thậm chí có thể thao tác các chuỗi Python kết quả như bạn muốn. Nếu xử lý số nguyên và số float, bạn có thể muốn giữ lại kiểu dữ liệu gốc ở đầu ra. Để thực hiện việc này, hãy chuyển đổi giá trị kết quả thành kiểu dữ liệu ban đầu của chúng sau khi lập chỉ mục chúng dưới dạng chuỗi:
converted_float = float(str(float_example)[:2])
converted_int = int(str(int_example)[:2])
print(converted_float, f'Data type:{type(converted_float)}')
print(converted_int, f'Data type:{type(converted_int)}')
Đối với một tập hợp, bạn có thể chuyển đổi nó thành một danh sách. Mặc dù bạn có thể chuyển đổi một đối tượng tập hợp thành một danh sách bằng cách sử dụng danh sách (bộ) Python một lớp lót, điều này không bảo toàn các vị trí mục trong danh sách kết quả. Để đảm bảo bạn nhận được một danh sách với các vị trí mục được giữ nguyên, hãy sử dụng hàm lambda của Python như sau:
set_example = {1, 3, 5, "Python"}
converted = sorted(set_example, key=lambda x: (isinstance(x, str), x))print(converted[3])
Gỡ lỗi Python thành thạo
Python có một đường cong học tập trơn tru. Nhưng những trường hợp ngoại lệ đơn giản có thể khiến bạn thất vọng nếu bạn không biết cách giải quyết chúng. Học cách gỡ lỗi mã của bạn và dành thời gian của bạn để giải quyết vấn đề là một chặng đường dài để sửa các lỗi và ngoại lệ mã hóa Python.