В этом руководстве по Python мы обсудим, как исправить ошибку TypeError в Python 3. Требуется байтовый объект, а не ошибка ‘str’.

Модуль Python Pickle — это мощный инструмент для сериализации и десериализации объектов Python. Он позволяет преобразовывать сложные структуры данных, такие как списки, словари и даже пользовательские объекты, в поток байтов, который можно легко хранить или передавать.

Ошибка обычно возникает при попытке записи или чтения данных с использованием модуля Pickle в текстовом режиме(‘t’).

По умолчанию Pickle работает в двоичном режиме(«b»), что означает, что он ожидает и создает байтовые объекты. Когда вы пытаетесь передать строку вместо байтового объекта в двоичном режиме, Python выдает эту ошибку.

Содержание

Пример 1

Предположим, у нас есть словарь Python, содержащий некоторые данные, которые мы хотим сериализовать с помощью Pickle:

import pickle

employee_data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

Теперь давайте попытаемся сериализовать этот словарь в файл с именем data.pkl, используя текстовый режим(«t») в Python:

with open('data.pkl', 'wb') as f:
    pickle.dump(employee_data, f)

Затем десериализовать его обратно в loading_data в Python:

with open('data.pkl', 'rt') as f:
    loaded_data = pickle.load(f)

print(loaded_data)

Теперь в Python возникает ошибка «typeerror: требуется байтовый объект, а не ‘str’ Pickle».

Вот полный код для ошибки:

import pickle

employee_data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

with open('data.pkl', 'wb') as f:
    pickle.dump(employee_data, f)
with open('data.pkl', 'rt') as f:
    loaded_data = pickle.load(f)

print(loaded_data)

Выход:

Traceback(most recent call last):
  File "C:\Users\kumar\PycharmProjects\pythonProject1\main.py", line 8, in 
    loaded_data = pickle.load(f)
TypeError: a bytes-like object is required, not 'str'

Результат можно увидеть на скриншоте ниже после выполнения кода в PyCharm.

Ошибка типа Pickle в Python 3

Пример 2

Чтобы исправить ошибку «typeerror, требуется байтовый объект, а не ‘str’», нам нужно открыть файл в двоичном режиме(«b»), а не в текстовом режиме. Это говорит Python, что мы хотим работать с байтоподобными объектами, а не со строками. Вот исправленный код:

with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

Открывая файл в двоичном режиме(«wb»), мы гарантируем, что Pickle работает с байтоподобными объектами, предотвращая ошибку TypeError в Python.

Вот полный код, который не будет вызывать ошибку типа Pickle:

import pickle

data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

with open('data.pkl', 'rb') as f:
    loaded_data = pickle.load(f)

print(loaded_data)

Выход:

{'name': 'Alice', 'age': 30, 'city': 'New York'}

На снимке экрана ниже представлен результат после успешной реализации кода в редакторе Pycharm.

Результат после успешной реализации кода в редакторе Pycharm

Заключение

Понимание и исправление ошибки типа Pickle в Python 3: требуется байтовый объект, а не ошибка ‘str’, имеет решающее значение для работы с сериализованными данными.

Мы можем избежать этой ошибки, открыв файлы в двоичном режиме(«be») и успешно сериализовав и десериализовав объекты Python с помощью Pickle.

Всегда дважды проверяйте режимы файлов и обрабатывайте данные соответствующим образом, чтобы предотвратить ошибки в ваших проектах Python.

Добавить комментарий